我刚开始使用win32 GDI编程,很难找到好的参考资料。我有一个简单的应用程序,通过执行以下操作捕获屏幕:ojit_pre
我正在捕获一个兼容的位图,在我的机器上是32位的。使用相同/相似的调用如何在8位中捕获屏幕?16位怎么样?
最佳答案
使用CreateDIBSection创建8bpp位图,并将BitBlt添加到该位图上。
填充BITMAPINFO结构将是有趣的。不能使用普通的BITMAPINFO结构,因为它只为单个调色板项分配空间,对于8bpp图像,您将需要完整的256个项。
如果您想作弊,可以使用匿名联合来声明一个有足够空间供其调色板使用的BITMAPINFO。
union
{
BITMAPINFO bmi;
struct {
BITMAPINFOHEADER bmih;
RGBQUAD extra[256];
} dummy;
};
bmi.bmiHeader.biSize = sizeof (bmi.bmiHeader);
bmi.biBitCount = 8;
// and so on.
至于要在颜色表中初始化的值。。。当GDI不在8bpp模式下时,我想不出一个简单的方法来从GDI获得默认的8bpp调色板。我怀疑CreateHalftonePalette不会在非调色板设备上做任何事情。