当前位置: 首页 > article >正文

CImage拷贝到另一个CImage,两个方法

下面第一个方法是在第二个方法的基础上优化来的,这里都贴出来供大家参考学习。

void CopyImg(const CImage& src, CImage& dst)
{if (src.IsNull())return;//源图像参数BYTE* srcPtr = (BYTE*)src.GetBits();int srcBitsCount = src.GetBPP();int srcWidth = src.GetWidth();int srcHeight = src.GetHeight();int srcPitch = src.GetPitch();//销毁原有图像if (!dst.IsNull()){dst.Destroy();}//创建新图像if (srcBitsCount == 32)   //支持alpha通道{dst.Create(srcWidth, srcHeight, srcBitsCount, 1);}else{dst.Create(srcWidth, srcHeight, srcBitsCount, 0);}//加载调色板, for 8 bit bitmapif (srcBitsCount <= 8 && src.IsIndexed())//需要调色板{RGBQUAD pal[256];int nColors = src.GetMaxColorTableEntries();if (nColors > 0){src.GetColorTable(0, nColors, pal);dst.SetColorTable(0, nColors, pal);//复制调色板程序}}//目标图像参数BYTE *destPtr = (BYTE*)dst.GetBits();int destPitch = dst.GetPitch();// the new codes by sund if (srcPitch < 0) {memcpy(destPtr + destPitch*(srcHeight - 1), srcPtr + srcPitch*(srcHeight - 1), srcHeight*abs(srcPitch));}else {memcpy(destPtr, srcPtr, srcHeight*abs(srcPitch));}return;
}

void CopyImage(const CImage& srcImage, CImage& destImage)
{if (srcImage.IsNull())return;BYTE* srcPtr = (BYTE*)srcImage.GetBits();int srcBitsCount = srcImage.GetBPP();int srcWidth = srcImage.GetWidth();int srcHeight = srcImage.GetHeight();int srcPitch = srcImage.GetPitch();if (!destImage.IsNull()){destImage.Destroy();}if (srcBitsCount == 32){destImage.Create(srcWidth, srcHeight, srcBitsCount, 1);}else{destImage.Create(srcWidth, srcHeight, srcBitsCount, 0);}if (srcBitsCount <= 8 && srcImage.IsIndexed()){RGBQUAD pal[256];int nColors = srcImage.GetMaxColorTableEntries();if (nColors > 0){srcImage.GetColorTable(0, nColors, pal);destImage.SetColorTable(0, nColors, pal);}}BYTE *destPtr = (BYTE*)destImage.GetBits();int destPitch = destImage.GetPitch();for (int i = 0; i < srcHeight; i++){memcpy(destPtr + i*destPitch, srcPtr + i*srcPitch, abs(srcPitch));}
}

我测试的结果是,第一种方法速度要快一些。

http://www.lryc.cn/news/2414113.html

相关文章:

  • 备战数学建模4-MATLAB绘制三维图形
  • MatchPuppy:狗狗相亲网站
  • Request.QueryString
  • 电脑蓝屏怎么办 七大原因及解决办法来帮你
  • MATLAB实现随机数方法合集
  • 1、Intent和IntentFilter详解
  • 如何浏览yandex广告报表?
  • oSIP开发者手册 oSIP开发者手册
  • 每天更新的纯净版 Chromium OS 镜像已经可以下载
  • 临界区死锁和死循环
  • Thread out-of-synch 错误
  • 酷炫的网站合集-
  • C++中内存块置0的三种方法:memset, ZeroMemory和SecurZeroMemory
  • vlan的基本配置
  • LEETCODE-DAY27
  • 创建个人网站(一) 如何申请一个网站
  • 电脑蓝屏显示0x000000f4怎么办的四个解决方法
  • Class类的newInstance方法抛出InstantiationException异常
  • js中prompt()的用法
  • C语言socket编程----实现TCP通信
  • 【C语言】常见面笔试题(10道)
  • 全景图像拼接
  • 关于led电源设计
  • c++中静态函数与动态函数的区别
  • 深度学习(四)卷积神经网络-卷积神经网络(3) -Andrew Ng
  • sockaddr和sockaddr_in的区别
  • printf输出格式
  • 167.Web前端网页制作 大气的UI设计平台网页实例 大学生期末大作业
  • Cache(三):cache的常见名词与Cache一致性问题简介
  • mysql安装程序错误代码2503,Win10安装程序错误2502/2503的解决方法