【发布时间】:2012-01-30 22:49:12
【问题描述】:
我创建了一个半透明的测试图像,用 128-alpha 黑色填充。我在两种方法之间交替绘制它:WPF 本机和 GDI 互操作。它们完全不同。 WPF 已正确完成,但 GDI 在绘制之前似乎首先与白色混合:
如果在照片上绘制,GDI 部分使它下面的东西变亮,即使 0,0,0,128 的颜色应该使它下面的东西变暗:
代码如下:
if (iteration % 2 == 0)
context.DrawImage(new BitmapImage(new System.Uri("I:/test.png")),
new Rect(0, 0, 80, 24));
else
{
var bmp = (D.Bitmap) D.Bitmap.FromFile("I:/test.png");
var handle = bmp.GetHbitmap();
var bmpSource = Imaging.CreateBitmapSourceFromHBitmap(handle, IntPtr.Zero,
Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
context.DrawImage(bmpSource, new Rect(0, 0, 80, 24));
WinAPI.DeleteObject(handle);
GC.KeepAlive(bmp);
}
对于第二张图片,我更改了 WPF 的 Rect 大小以显示它们不重叠。
如何正确绘制半透明的 GDI 图像?
(是的,由于复杂的原因,它确实必须是 GDI 图像 - 实际上它不是来自文件,而是来自一些外部代码,但问题很容易通过文件重现)
【问题讨论】: