【发布时间】:2012-03-31 22:33:00
【问题描述】:
我正在尝试在 4 位索引位图上使用 GDI+ api 绘制一些基本的图形基元(线、矩形等)。我正在使用 Bitmap() 函数来创建位图和加载位图。
Bitmap myBitmap(100/*width*/,100/*height*/,PixelFormat4bppIndexed/*Pixel format*/);
Graphics graphics(&myBitmap);
SolidBrush brush(Color(255,128,0,0));
graphics.FillRectangle(&brush,0,0,100,100);
但这不起作用(没有创建矩形)。 可能是什么问题呢?我尝试手动使用 LockBits 并手动修改位,效果很好,那么为什么它不适用于 Graphics gdi+ 操作。
【问题讨论】:
-
不应该先创建调色板吗?
-
> 但这不起作用(没有创建矩形)。它不会抛出异常吗?
-
不要忽略函数返回值。您无法完成这项工作,不支持绘制到具有索引颜色格式的位图中。
-
当我们以这种方式创建位图对象时,它默认选择了调色板。我们也可以获取并检查该调色板。我创建了具有相同颜色的 Pen 对象,这些颜色在 Bitmap 对象的调色板中可用,但它不起作用,即使它没有返回任何错误。我通过创建 4 位位图并手动设置调色板,然后使用普通 GDI 函数绘制来尝试在 GDI 中使用 DIB。它工作顺利。
-
而且更令人惊讶的是,当我尝试从 4bppIndexed Bitmap 获取 HBITMAP 时,它返回一个 32 位 HBITMAP(使用 GetObject 检查),如果我锁定 4bppIndexed Bitmap 的位并根据 4bpp 进行修改,它有效。
标签: windows visual-c++ gdi+