大家好,已有一个CBitmap,怎么获得/修改某个象素的颜色?

时间:2022-09-11 07:25:21
例如如下代码:

CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1);

怎么知道这个位图里某个点的颜色? (例如第一行第一列的颜色)

如何修改这个颜色?

7 个解决方案

#1



CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1);
CWindowDC dcDesktop(NULL);
CDC dcTmp;
dcTmp.CreateCompatibleDC(&dcDesktop);
CBitmap* pOldBmp = dcTmp.SelectObject(&bmp);
COLORREF cr = dcTmp.GetPixel(x, y);

#2


基本思想就是 加载位图, 创建兼容DC,将位图选入兼容DC, 获取像素点颜色
楼上正解

#3



好,这是读取象素值的方法,并且很巧妙。

有没有修改颜色的方法? 是修改CBitmap里面的,不是屏幕上的。 因为我最终要使用StretchBlt来显示图片。


我也不要求随意改,只要使用几种常用的颜色。

#4


GetPixel(x, y)

#5


引用 3 楼 d93d3s2d9s9 的回复:
好,这是读取象素值的方法,并且很巧妙。

有没有修改颜色的方法? 是修改CBitmap里面的,不是屏幕上的。 因为我最终要使用StretchBlt来显示图片。


我也不要求随意改,只要使用几种常用的颜色。
SetPixel可以修改像素,你可以把内存DC里的像素改了在blt过去

#6



好,感谢大家,可行了。

就是 SetPixel 的速度慢了点。

#7


您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法

#1



CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1);
CWindowDC dcDesktop(NULL);
CDC dcTmp;
dcTmp.CreateCompatibleDC(&dcDesktop);
CBitmap* pOldBmp = dcTmp.SelectObject(&bmp);
COLORREF cr = dcTmp.GetPixel(x, y);

#2


基本思想就是 加载位图, 创建兼容DC,将位图选入兼容DC, 获取像素点颜色
楼上正解

#3



好,这是读取象素值的方法,并且很巧妙。

有没有修改颜色的方法? 是修改CBitmap里面的,不是屏幕上的。 因为我最终要使用StretchBlt来显示图片。


我也不要求随意改,只要使用几种常用的颜色。

#4


GetPixel(x, y)

#5


引用 3 楼 d93d3s2d9s9 的回复:
好,这是读取象素值的方法,并且很巧妙。

有没有修改颜色的方法? 是修改CBitmap里面的,不是屏幕上的。 因为我最终要使用StretchBlt来显示图片。


我也不要求随意改,只要使用几种常用的颜色。
SetPixel可以修改像素,你可以把内存DC里的像素改了在blt过去

#6



好,感谢大家,可行了。

就是 SetPixel 的速度慢了点。

#7


您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法