改变bitmap背景颜色函数
来源:互联网 发布:分析知乎日报app 编辑:程序博客网 时间:2024/06/16 00:06
HBITMAP COLAgent::ReplaceColor (HBITMAP hBmp,COLORREF cOldColor,COLORREF cNewColor)
{
HBITMAP RetBmp=NULL;
if (hBmp)
{
HDC BufferDC=CreateCompatibleDC(NULL); // 源位图DC
if (BufferDC)
{
SelectObject(BufferDC,hBmp);//选入DC中
HDC DirectDC=CreateCompatibleDC(NULL); // 目标DC
if (DirectDC)
{
// 获取源位图大小
BITMAP bm;
GetObject(hBmp, sizeof(bm), &bm);
// 初始化BITMAPINFO信息,以便使用CreateDIBSection
BITMAPINFO RGB32BitsBITMAPINFO;
ZeroMemory(&RGB32BitsBITMAPINFO,sizeof(BITMAPINFO));
RGB32BitsBITMAPINFO.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
RGB32BitsBITMAPINFO.bmiHeader.biWidth=bm.bmWidth;
RGB32BitsBITMAPINFO.bmiHeader.biHeight=bm.bmHeight;
RGB32BitsBITMAPINFO.bmiHeader.biPlanes=1;
RGB32BitsBITMAPINFO.bmiHeader.biBitCount=32;
UINT * ptPixels;
HBITMAP DirectBitmap= CreateDIBSection(DirectDC,
(BITMAPINFO *)&RGB32BitsBITMAPINFO,
DIB_RGB_COLORS,(void **)&ptPixels, NULL, 0);
if (DirectBitmap)
{
HGDIOBJ PreviousObject=SelectObject(DirectDC, DirectBitmap);
BitBlt(DirectDC,0,0,bm.bmWidth,bm.bmHeight,BufferDC,0,0,SRCCOPY);
// 转换 COLORREF 为 RGB
cOldColor=COLORREF2RGB(cOldColor);
cNewColor=COLORREF2RGB(cNewColor);
// 替换颜色
for (int i=((bm.bmWidth*bm.bmHeight)-1);i>=0;i--)
{
if (ptPixels[i]==cOldColor) ptPixels[i]=cNewColor;
}
// 修改位图 DirectBitmap
SelectObject(DirectDC,PreviousObject);
// 完成
RetBmp=DirectBitmap;
}
// 释放DC
DeleteDC(DirectDC);
}
// 释放DC
DeleteDC(BufferDC);
}
}
return RetBmp;
}
{
HBITMAP RetBmp=NULL;
if (hBmp)
{
HDC BufferDC=CreateCompatibleDC(NULL); // 源位图DC
if (BufferDC)
{
SelectObject(BufferDC,hBmp);//选入DC中
HDC DirectDC=CreateCompatibleDC(NULL); // 目标DC
if (DirectDC)
{
// 获取源位图大小
BITMAP bm;
GetObject(hBmp, sizeof(bm), &bm);
// 初始化BITMAPINFO信息,以便使用CreateDIBSection
BITMAPINFO RGB32BitsBITMAPINFO;
ZeroMemory(&RGB32BitsBITMAPINFO,sizeof(BITMAPINFO));
RGB32BitsBITMAPINFO.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
RGB32BitsBITMAPINFO.bmiHeader.biWidth=bm.bmWidth;
RGB32BitsBITMAPINFO.bmiHeader.biHeight=bm.bmHeight;
RGB32BitsBITMAPINFO.bmiHeader.biPlanes=1;
RGB32BitsBITMAPINFO.bmiHeader.biBitCount=32;
UINT * ptPixels;
HBITMAP DirectBitmap= CreateDIBSection(DirectDC,
(BITMAPINFO *)&RGB32BitsBITMAPINFO,
DIB_RGB_COLORS,(void **)&ptPixels, NULL, 0);
if (DirectBitmap)
{
HGDIOBJ PreviousObject=SelectObject(DirectDC, DirectBitmap);
BitBlt(DirectDC,0,0,bm.bmWidth,bm.bmHeight,BufferDC,0,0,SRCCOPY);
// 转换 COLORREF 为 RGB
cOldColor=COLORREF2RGB(cOldColor);
cNewColor=COLORREF2RGB(cNewColor);
// 替换颜色
for (int i=((bm.bmWidth*bm.bmHeight)-1);i>=0;i--)
{
if (ptPixels[i]==cOldColor) ptPixels[i]=cNewColor;
}
// 修改位图 DirectBitmap
SelectObject(DirectDC,PreviousObject);
// 完成
RetBmp=DirectBitmap;
}
// 释放DC
DeleteDC(DirectDC);
}
// 释放DC
DeleteDC(BufferDC);
}
}
return RetBmp;
}
0 0
- 改变bitmap背景颜色函数
- 【vc】装bitmap背景颜色函数
- android 改变bitmap颜色
- 改变对话框背景颜色
- 循环改变背景颜色
- Aptana3 改变背景颜色
- javaScript 改变背景颜色
- Cocos2d改变背景颜色
- mfc改变背景颜色
- 改变视图背景颜色
- Aptana3 改变背景颜色
- Aptana3 改变背景颜色
- 改变Activity背景颜色
- eclipse 改变颜色,背景
- 点击改变背景颜色
- 改变myeclipse背景颜色
- 改变状态栏背景颜色
- UINavigationController改变背景颜色
- Android学习笔记--读取网络图片
- iOS设计模式——委托(delegate)
- LeetCode42/11 Trapping Rain Water/Container With Most Water/Hist area**
- Mysql数学函数
- linux C语言网络编程学习总结<二>
- 改变bitmap背景颜色函数
- virtual
- yii 路径别名
- 用Notepad++编辑tnsnames.ora结果保存出错:请检查文件是否在别的程序中打开
- WPF C# 字符串读写文件
- Android:分析app、Process、Task之间的区别,以及获取最近运行的程序(近期任务)与正在运行的程序
- SQL基本操作
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- IOS main函数运行前的dydl动态链接库