1. CxImage* ScaleImageBy9PNG(CxImage *pRawImage, int nDstWidth,int nDstHeight)
  2. {
  3. if(NULL == pRawImage) return NULL;
  4.  
  5. CDC *pDC = CDC::FromHandle(::GetDC(NULL));
  6. CDC memDC;
  7. memDC.CreateCompatibleDC(pDC);
  8.  
  9. const UINT nBMPWidth = nDstWidth;
  10. const UINT nBMPHeight= nDstHeight;
  11. const UINT nRawWidth = pRawImage->GetWidth();
  12. const UINT nRawHeight = pRawImage->GetHeight();
  13.  
  14. BITMAPINFO bitmapinfo;
  15. bitmapinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
  16. bitmapinfo.bmiHeader.biBitCount = ;
  17. bitmapinfo.bmiHeader.biHeight = nBMPHeight;
  18. bitmapinfo.bmiHeader.biWidth = nBMPWidth;
  19. bitmapinfo.bmiHeader.biPlanes = ;
  20. bitmapinfo.bmiHeader.biCompression=BI_RGB;
  21. bitmapinfo.bmiHeader.biXPelsPerMeter=;
  22. bitmapinfo.bmiHeader.biYPelsPerMeter=;
  23. bitmapinfo.bmiHeader.biClrUsed=;
  24. bitmapinfo.bmiHeader.biClrImportant=;
  25. bitmapinfo.bmiHeader.biSizeImage = bitmapinfo.bmiHeader.biWidth * bitmapinfo.bmiHeader.biHeight * bitmapinfo.bmiHeader.biBitCount / ;
  26. HBITMAP hBitmap = ::CreateDIBSection (memDC.m_hDC,&bitmapinfo, ,NULL, , );
  27.  
  28. CxImage *newImage = new CxImage();
  29. newImage->CreateFromHBITMAP(hBitmap);
  30. if (hBitmap != NULL)
  31. {
  32. DeleteObject(hBitmap);
  33. }
  34. ::ReleaseDC(NULL, pDC->m_hDC);
  35. if(memDC.m_hDC) ::DeleteDC(memDC.m_hDC);
  36.  
  37. int newImageHeight = newImage->GetHeight();
  38. int newImageWidth = newImage->GetWidth();
  39. if(FALSE == newImage->AlphaIsValid())
  40. {
  41. newImage->AlphaCreate();
  42. }
  43. if(newImageHeight > nRawHeight && newImageWidth > nRawWidth)
  44. {
  45. for(int iH=;iH<newImageHeight;++iH)
  46. for(int iW=;iW<newImageWidth;++iW)
  47. {
  48. int rawH = iH,rawW = iW;
  49. if(rawH >= (newImageHeight-nRawHeight/))
  50. {
  51. rawH = rawH - (newImageHeight - nRawHeight);
  52. }
  53. if(rawW >= (newImageWidth-nRawWidth/))
  54. {
  55. rawW = rawW - (newImageWidth - nRawWidth);
  56. }
  57.  
  58. if((iH < nRawHeight/ || iH>=(newImageHeight-nRawHeight/))&&
  59. (iW < nRawWidth/ || iW>= (newImageWidth-nRawWidth/)))
  60. {
  61. //4块源
  62. RGBQUAD argb = pRawImage->GetPixelColor(rawW,rawH,true);
  63. newImage->SetPixelColor(iW,iH,RGB(argb.rgbRed,argb.rgbGreen,argb.rgbBlue));
  64. newImage->AlphaSet(iW,iH,argb.rgbReserved);
  65. }
  66. else
  67. {
  68. if((iH < nRawHeight/ || iH>=(newImageHeight-nRawHeight/))&&iW->=)
  69. {
  70. RGBQUAD argb = newImage->GetPixelColor(iW-,iH,true);
  71. newImage->SetPixelColor(iW,iH,RGB(argb.rgbRed,argb.rgbGreen,argb.rgbBlue));
  72. newImage->AlphaSet(iW,iH,argb.rgbReserved);
  73. }
  74. else
  75. {
  76. if(iH - >= )
  77. {
  78. RGBQUAD argb = newImage->GetPixelColor(iW,iH-,true);
  79. newImage->SetPixelColor(iW,iH,RGB(argb.rgbRed,argb.rgbGreen,argb.rgbBlue));
  80. newImage->AlphaSet(iW,iH,argb.rgbReserved);
  81. }
  82. }
  83. }
  84. }
  85. }
  86. return newImage;
  87. }

9PNG的意思就是绘制时按9块区域绘制,左上左下右上右下是源,其他是拉伸的部分。CxImage主要使用像素点的方式来进行拉伸,并且每个像素都有copy透明信息。

CxImage实现9PNG的更多相关文章

  1. CxImage图像库的使用 .

    http://blog.csdn.net/wangjie0377/article/details/7830405 CxImage图像库 CxImage下载地址:http://www.codeproje ...

  2. CxImage在VS2010下的配置

    http://blog.csdn.net/youzhuo/article/details/24601621 一.编译Cximage 1.在SourceForge上下载cximage702_full.7 ...

  3. 9png图片制作

    制作步骤不多说了,这儿有链接:http://blog.csdn.net/pugongying1988/article/details/6938972 链接中去边框一个像素可以不用做,直接用androi ...

  4. CxImage

    启动项目的时候显示此时 百度“无法启动程序cximage.lib” 得到http://tieba.baidu.com/p/1935208210把第二项设为启动项即可 为什么设置第二项为启动项呢 因为h ...

  5. 四大图像库:OpenCV/FreeImage/CImg/CxImage

    1.对OpenCV 的印象:功能十分的强大,而且支持目前先进的图像处理技术,体系十分完善,操作手册很详细,手册首先给大家补计算机视觉的知识,几乎涵盖了近10年内的主流算法: 然后将图像格式和矩阵运算, ...

  6. CxImage整理(叠加字符/图像合并)

    //CxImage叠加字符 void CCxImageTestDlg::OnBnClickedButton1() { CxImage imgJPG; // 定义一个CxImage对象 imgJPG.L ...

  7. [ZT]图像处理库的比较:OpenCV,FreeImage,CImg,CxImage

    1.对OpenCV 的印象:功能十分的强大,而且支持目前先进的图像处理技术,体系十分完善,操作手册很详细,手册首先给大家补计算机视觉的知识,几乎涵盖了近10年内的主流算法: 然后将图像格式和矩阵运算, ...

  8. CxImage的使用

    1.首先从此处下载源代码 http://www.codeproject.com/KB/graphics/cximage.aspx 2.然后将里面的工程全部编译一下,我觉得应该是生成对应的库. 3.然后 ...

  9. 图像处理库的比较:OpenCV,FreeImage,CImg,CxImage

    1.对OpenCV 的印象:功能十分的强大,而且支持目前先进的图像处理技术,体系十分完善,操作手册很详细,手册首先给大家补计算机视觉的知识,几乎涵盖了近10年内的主流算法: 然后将图像格式和矩阵运算, ...

随机推荐

  1. 用Windows自带DOS命令提示符 制作U盘启动盘

    Windows & DOS命令提示符 & U盘 & 启动盘 用Windows自带DOS命令提示符 制作U盘启动盘.docx http://xgqfrms.blog.163.co ...

  2. HDU——1023 Train Problem II

    Train Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  3. java JDBC 连接数据库查询数据与直接使用sql的疑问

    JDBC 封装连接是好的前提: SystemAuthorizingRealm c = new SystemAuthorizingRealm(); conn = c.getConnection(); / ...

  4. struct结构体在c和c++中的差别

    非常多次遇到这个struct的问题,今天在这里简单总结一下我的理解 一.struct在C 中的使用 1.单独使用struct定义结构体类型 struct Student { int id; int n ...

  5. 【翻译自mos文章】注意: ASMB process exiting due to lack of ASM file activity

    注意: ASMB process exiting due to lack of ASM file activity 參考原文: NOTE: ASMB process exiting due to la ...

  6. android开发艺术探索学习 之 结合Activity的生命周期了解Activity的LaunchMode

    转载请标明出处: http://blog.csdn.net/lxk_1993/article/details/50749728 本文出自:[lxk_1993的博客]: 首先还是先介绍下Activity ...

  7. linux查找nginx所在目录

    ps -ef |grep nginx

  8. 深入理解 JBoss 7/WildFly Domain 模式启动过程

    概述 JBoss 7/WildFly 以 domain 模式启动时会启动多个 JVM.比如例如以下通过启动脚本启动 domain 模式: ./domain.sh 启动后我们查看进程: [kylin@l ...

  9. javaScript 检測 能否够连接指定server

    本文主要讲述怎样在js里面从多个服务端servlet中找到可用的地址 一般项目部署到生产环境之后会有一个生产网段(就是你能够在家訪问)和一个办公网段(仅仅能在公司才干訪问). 我们的项目部署好了之后, ...

  10. js将图片转为base64编码,以字符串传到后台存入数据库

    (前台在中approve_edit.html中,后台不变) 链接参考:http://www.cnblogs.com/Strom-HYL/p/6782176.html 该链接文中并没有用到easyUI的 ...