DIB的RGB值的修改

sheila_1988 2010-01-11 12:13:59
RT,在做灰度图像处理,想要添加单色,单色不知道怎么样修改其RGB值,只会操作灰度值,请人指导,最好有完善点的代码,急要= =
...全文
285 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
x___f__ 2010-01-13
  • 打赏
  • 举报
回复
请问添加单色是什么意思啊?
sjdev 2010-01-11
  • 打赏
  • 举报
回复
已经够简洁了。
sheila_1988 2010-01-11
  • 打赏
  • 举报
回复
有没有简洁点的办法。。。
sjdev 2010-01-11
  • 打赏
  • 举报
回复
1.抽象RGB

typedef struct tagRGBX
{
public:
tagRGBX()
{
btRed = btBlue = btGreen = btUnused = 0;
}
tagRGBX(BYTE red, BYTE green, BYTE blue)
{
btRed = red;
btBlue = blue;
btGreen = green;
btUnused = 0;
}
tagRGBX(COLORREF color)
{
btRed = GetRValue(color);
btBlue = GetBValue(color);
btGreen = GetGValue(color);
btUnused = 0;
}

BYTE btBlue;
BYTE btGreen;
BYTE btRed;

protected:
BYTE btUnused;

public:
tagRGBX Gray()
{
int r = (int)btRed * 3;
int g = (int)btGreen * 6;
int b = (int)btBlue;
BYTE btGray = (BYTE)((r + g + b) / 10);
return RGBX(btGray, btGray, btGray);
}
}RGBX;


2.定义一个类,从CBitmap继承,添加方法

// 获取图像像素数据
RGBX* 你的CBitmap派生类::GetDIBits32()
{
BITMAPINFO bi;

int nHeight = PrepareBitmapInfo32(bi);

if (!nHeight)
return FALSE;

BYTE* pBits = (BYTE*)new BYTE[bi.bmiHeader.biSizeImage];
HDC hdc = GetDC(NULL);

if (!GetDIBits(hdc, (HBITMAP)GetSafeHandle(), 0, nHeight, pBits, &bi, DIB_RGB_COLORS))
{
delete pBits;
pBits = NULL;
}

::ReleaseDC(NULL, hdc);

return (RGBX*)pBits;
}


3.使用GetDIBits32的返回值,操作吧。
fandh 2010-01-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sheila_1988 的回复:]
还是不懂5555555555555临时抱佛脚太痛苦了
[/Quote]
是够痛苦的,呵呵
lambochan 2010-01-11
  • 打赏
  • 举报
回复
BMP有单色的吗?最少的1bit都有两种色..
1bit的两种色可以由其索引(1bit): 0 或 1得到,然后就可以取得色彩表(colors table)的RGB三通道.
sheila_1988 2010-01-11
  • 打赏
  • 举报
回复
还是不懂5555555555555临时抱佛脚太痛苦了

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧