+ -
当前位置:首页 → 问答吧 → 请问从RGB数据生成内存dc的最简单的方法是什么?

请问从RGB数据生成内存dc的最简单的方法是什么?

时间:2011-11-24

来源:互联网

我有一个24B的rgb位图数据,我想把它加载到DC,在上面画图后再保存。
我现在用的方法是这样
1 先根据我的rgb位图尺寸填充 BITMAPINFO
2 memdc.CreateCompatibleDC(hdc) 生成DC
3 hbmp=CreateDIBSection(....) 生成BITMAP, 并用 memdc.SelectObject(hbmp)
4 最后用 StretchDIBits 把rgb数组写入到这个memdc中去
5,我自己的一些处理
6,保存bmp

总觉得这个方法很繁琐,请问更合理的方式是什么?

谢谢..

作者: beanders   发布时间: 2011-11-24

gdi下就这么搞。试试gdi+

作者: dizuo   发布时间: 2011-11-25

我直接写bmp文件头 bmp信息头 rgb数据 完毕

作者: smwhotjay   发布时间: 2011-11-25

引用楼主 beanders 的回复:
我有一个24B的rgb位图数据,我想把它加载到DC,在上面画图后再保存。
我现在用的方法是这样
1 先根据我的rgb位图尺寸填充 BITMAPINFO
2 memdc.CreateCompatibleDC(hdc) 生成DC
3 hbmp=CreateDIBSection(....) 生成BITMAP, 并用 memdc.SelectObject(hbmp)
4 最后用 StretchD……

觉得你的方法合理~

作者: VisualEleven   发布时间: 2011-11-25

你的方法不好,太麻烦,用这样的:
unsigned int * buf = (unsigned int *)你的数据;
CBitmap map;
map.SetBitmapBits(width * height * 4,buf);
CDC dc;
CClientDC pDC;
dc.CreateCompatibleDC(&pDC);
dc.SelectObject(&map);

作者: wawagua   发布时间: 2011-11-25

24位的得加上一位0上去变成32位

作者: wawagua   发布时间: 2011-11-25

引用 2 楼 smwhotjay 的回复:
我直接写bmp文件头 bmp信息头 rgb数据 完毕

我知道的也是这样子的。

作者: mjjackey   发布时间: 2011-11-25

谢谢
再追加个问题

请问我如何从 CBitmap获得RGB指针呢?
我先生成一个位图 pBitmap->SetBitmapBits(24,NULL);
然后 pBitmap->CreateCompatibleBitmap(MEM_DC,1920,1080);
MEM_DC.SelectObject(pBitmap);
这时候我在MEM_DC上的绘图操作实际上就是在pBitmap上画图对吗?
我想保存成BMP,请问我如何获得这个rgb指针?
我现在的做法比较笨:1 另外再创建一个DC,然后用CreateDIBSection获得一个rgb指针 , 然后 StretchBlt给DC画图,最后保存rgb指针.

谢谢

作者: beanders   发布时间: 2011-11-26