CxImage实现9PNG
CxImage* ScaleImageBy9PNG(CxImage *pRawImage, int nDstWidth,int nDstHeight)
{
if(NULL == pRawImage) return NULL; CDC *pDC = CDC::FromHandle(::GetDC(NULL));
CDC memDC;
memDC.CreateCompatibleDC(pDC); const UINT nBMPWidth = nDstWidth;
const UINT nBMPHeight= nDstHeight;
const UINT nRawWidth = pRawImage->GetWidth();
const UINT nRawHeight = pRawImage->GetHeight(); BITMAPINFO bitmapinfo;
bitmapinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bitmapinfo.bmiHeader.biBitCount = ;
bitmapinfo.bmiHeader.biHeight = nBMPHeight;
bitmapinfo.bmiHeader.biWidth = nBMPWidth;
bitmapinfo.bmiHeader.biPlanes = ;
bitmapinfo.bmiHeader.biCompression=BI_RGB;
bitmapinfo.bmiHeader.biXPelsPerMeter=;
bitmapinfo.bmiHeader.biYPelsPerMeter=;
bitmapinfo.bmiHeader.biClrUsed=;
bitmapinfo.bmiHeader.biClrImportant=;
bitmapinfo.bmiHeader.biSizeImage = bitmapinfo.bmiHeader.biWidth * bitmapinfo.bmiHeader.biHeight * bitmapinfo.bmiHeader.biBitCount / ;
HBITMAP hBitmap = ::CreateDIBSection (memDC.m_hDC,&bitmapinfo, ,NULL, , ); CxImage *newImage = new CxImage();
newImage->CreateFromHBITMAP(hBitmap);
if (hBitmap != NULL)
{
DeleteObject(hBitmap);
}
::ReleaseDC(NULL, pDC->m_hDC);
if(memDC.m_hDC) ::DeleteDC(memDC.m_hDC); int newImageHeight = newImage->GetHeight();
int newImageWidth = newImage->GetWidth();
if(FALSE == newImage->AlphaIsValid())
{
newImage->AlphaCreate();
}
if(newImageHeight > nRawHeight && newImageWidth > nRawWidth)
{
for(int iH=;iH<newImageHeight;++iH)
for(int iW=;iW<newImageWidth;++iW)
{
int rawH = iH,rawW = iW;
if(rawH >= (newImageHeight-nRawHeight/))
{
rawH = rawH - (newImageHeight - nRawHeight);
}
if(rawW >= (newImageWidth-nRawWidth/))
{
rawW = rawW - (newImageWidth - nRawWidth);
} if((iH < nRawHeight/ || iH>=(newImageHeight-nRawHeight/))&&
(iW < nRawWidth/ || iW>= (newImageWidth-nRawWidth/)))
{
//4块源
RGBQUAD argb = pRawImage->GetPixelColor(rawW,rawH,true);
newImage->SetPixelColor(iW,iH,RGB(argb.rgbRed,argb.rgbGreen,argb.rgbBlue));
newImage->AlphaSet(iW,iH,argb.rgbReserved);
}
else
{
if((iH < nRawHeight/ || iH>=(newImageHeight-nRawHeight/))&&iW->=)
{
RGBQUAD argb = newImage->GetPixelColor(iW-,iH,true);
newImage->SetPixelColor(iW,iH,RGB(argb.rgbRed,argb.rgbGreen,argb.rgbBlue));
newImage->AlphaSet(iW,iH,argb.rgbReserved);
}
else
{
if(iH - >= )
{
RGBQUAD argb = newImage->GetPixelColor(iW,iH-,true);
newImage->SetPixelColor(iW,iH,RGB(argb.rgbRed,argb.rgbGreen,argb.rgbBlue));
newImage->AlphaSet(iW,iH,argb.rgbReserved);
}
}
}
}
}
return newImage;
}
9PNG的意思就是绘制时按9块区域绘制,左上左下右上右下是源,其他是拉伸的部分。CxImage主要使用像素点的方式来进行拉伸,并且每个像素都有copy透明信息。
CxImage实现9PNG的更多相关文章
- CxImage图像库的使用 .
http://blog.csdn.net/wangjie0377/article/details/7830405 CxImage图像库 CxImage下载地址:http://www.codeproje ...
- CxImage在VS2010下的配置
http://blog.csdn.net/youzhuo/article/details/24601621 一.编译Cximage 1.在SourceForge上下载cximage702_full.7 ...
- 9png图片制作
制作步骤不多说了,这儿有链接:http://blog.csdn.net/pugongying1988/article/details/6938972 链接中去边框一个像素可以不用做,直接用androi ...
- CxImage
启动项目的时候显示此时 百度“无法启动程序cximage.lib” 得到http://tieba.baidu.com/p/1935208210把第二项设为启动项即可 为什么设置第二项为启动项呢 因为h ...
- 四大图像库:OpenCV/FreeImage/CImg/CxImage
1.对OpenCV 的印象:功能十分的强大,而且支持目前先进的图像处理技术,体系十分完善,操作手册很详细,手册首先给大家补计算机视觉的知识,几乎涵盖了近10年内的主流算法: 然后将图像格式和矩阵运算, ...
- CxImage整理(叠加字符/图像合并)
//CxImage叠加字符 void CCxImageTestDlg::OnBnClickedButton1() { CxImage imgJPG; // 定义一个CxImage对象 imgJPG.L ...
- [ZT]图像处理库的比较:OpenCV,FreeImage,CImg,CxImage
1.对OpenCV 的印象:功能十分的强大,而且支持目前先进的图像处理技术,体系十分完善,操作手册很详细,手册首先给大家补计算机视觉的知识,几乎涵盖了近10年内的主流算法: 然后将图像格式和矩阵运算, ...
- CxImage的使用
1.首先从此处下载源代码 http://www.codeproject.com/KB/graphics/cximage.aspx 2.然后将里面的工程全部编译一下,我觉得应该是生成对应的库. 3.然后 ...
- 图像处理库的比较:OpenCV,FreeImage,CImg,CxImage
1.对OpenCV 的印象:功能十分的强大,而且支持目前先进的图像处理技术,体系十分完善,操作手册很详细,手册首先给大家补计算机视觉的知识,几乎涵盖了近10年内的主流算法: 然后将图像格式和矩阵运算, ...
随机推荐
- mariadb-10GTID复制及多源复制
---本文大纲 一.什么是GTID 二.应用场景 三.多线程复制说明 四.实现过程 五.多源复制原理 六.实现过程 ---------------------------------- 一.什么是GI ...
- POJ 1026 置换群的k次幂问题
题目大意: 给定了一组对应关系,经过k次幂后,得到新的对应关系b[i],然后将给定的字符串上的第i位字符放置到b[i]的位置上, 如果字符串长度不足n就用空格补足,这里的是空格,也就是str[i] = ...
- Uva1103 Ancient Messages
题意:识别图中的象形文字.但是,图形可以任意的拉伸,但不能拉断. 分析:这种题如果图形没有特征是不可做类型的题,不过观察图形可以发现每个图形中的洞的数量是一定的,我们只需要数出每一个封闭图形的洞数就能 ...
- Javascript网址跳转方法
第一种: window.location.href="http://www.baidu.com"; 第二种: window.navigate("http://www.ba ...
- vue2源码浏览分析01
1.构造函数 Vue$3 function Vue$3 (options) { if ("development" !== 'production' && !(t ...
- Workflow:添加工作流存储功能
数据库准备: 1. 创建database(这里我们用的是MSSQL.Workflow支持其它数据库,但是MSSQL是配置最方便,不要问我为什么!). 2. 运行位于[%WINDIR%\Microsof ...
- layoutSubviews, setNeedsLayout, layoutIfNeeded
layoutSubviews总结 ios layout机制相关方法 - (CGSize)sizeThatFits:(CGSize)size- (void)sizeToFit——————- - (voi ...
- 约瑟夫环问题(猴子选大王)PHP版
约瑟夫斯问题问题有时候也被描述成猴子选大王问题,题目如下.(最后会贴上约瑟夫问题的来历) 一群猴子排成一圈,按1,2,…,n依次编号. 然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再 ...
- 利用rman自己主动备份转储spfile
利用rman自己主动备份转储spfile [情景简单介绍] 生产环境丢失了server的參数文件,rman已开启自己主动备份设置. [操作过程简述] ----启动rman $rman target / ...
- Linux 下查找文件或文件夹
有些在我看来比较实用的命令,在这里记一下,避免每次都搜索一轮. 1.查找文件和文件夹 $ find . -name "mongo*" 从当前路径开始,向子目录查找名字含有 &quo ...