首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CreatePatternBrush和屏幕颜色深度

CreatePatternBrush和屏幕颜色深度
EN

Stack Overflow用户
提问于 2010-06-04 23:53:14
回答 2查看 514关注 0票数 2

我用CreateBitmap创建的位图,用CreatePatternBrush创建了一个画笔。

这个位图有1个像素宽,24个像素高,我有每个像素的RGB值,所以我创建了一个rgbquad数组并将其传递给CreateBitmap。

当屏幕颜色深度为32bpp时,这很好用,因为我创建的位图也是32bpp。

当屏幕颜色深度不是32bpp时,这会失败,我理解为什么会这样,因为我应该创建一个兼容的位图。

似乎我应该使用CreateCompatibleBitmap,但是我如何将我拥有的像素数据放入那个位图中呢?

我还读过关于CreateDIBPatternBrushPt、CreateDIBitmap、CreateDIBSection等的文章。

我不明白什么是DIBSection,并且发现这个主题通常令人困惑。

我确实知道我需要一个与屏幕具有相同颜色深度的位图,但是我如何创建只有32bpp像素数据的位图呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-06 15:14:49

您可以创建DIB,因为您可以使用独立于屏幕颜色深度的独立于设备的位图。参见CreateDIBSection()

如何创建只有32bpp像素数据的文件?可以使用32bpp数据创建DIB。正如您在文档中所看到的:

CreateDIBSection函数创建一个应用程序可以直接写入的DIB。该函数为您提供指向位图位值位置的指针。如果hSection为NULL,系统将为DIB分配内存。如果函数成功,则返回值是新创建的DIB的句柄,并且*ppvBits指向位图位值。

尝试如下所示:

代码语言:javascript
复制
VOID *ppvBits = NULL;
BITMAPINFO BitmapInfo;
memset(&BitmapInfo, 0, sizeof(BITMAPINFOHEADER));
BitmapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
BitmapInfo.bmiHeader.biWidth = 1;
BitmapInfo.bmiHeader.biHeight = 24;
BitmapInfo.bmiHeader.biPlanes = 1;
BitmapInfo.bmiHeader.biBitCount = 32;
BitmapInfo.bmiHeader.biCompression = BI_RGB;
HBITMAP hBitmap = CreateDIBSection(hDC, &BitmapInfo, DIB_RGB_COLORS, &ppvBits, NULL, 0);

在我们的例子中,*ppvBits指向1* 24 * (32 / 8)个分配的字节。

重要的是要知道,如果biHeight为正,则位图是自下而上的DIB,其原点是左下角。有关详细信息,请参阅BITMAPINFOHEADER Structure

票数 2
EN

Stack Overflow用户

发布于 2010-06-05 02:04:43

我用CreateCompatibleBitmap和SetPixel解决了这个问题。我想这不是最好的选择,但它是可行的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2975757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档