我已经创建了一个半透明的测试图像,填充了128-alpha黑色。我在两种方法之间交替绘制:WPF本机和GDI互操作。它们完全不同; WPF正确地完成了它,但是GDI似乎首先与白色混合,然后再进行绘制:
如果在照片上绘制,则GDI部分会使其下面的内容变得更亮,即使0,0,0,128颜色应该使其下面的任何内容变暗:
代码如下:
对于第二张图片,我更改了WPF的矩形大小,以显示它们不重叠。
如何正确绘制半透明的GDI图像?
(是的,由于某些复杂的原因,它必须是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的矩形大小,以显示它们不重叠。
如何正确绘制半透明的GDI图像?
(是的,由于某些复杂的原因,它必须是GDI图像 - 实际上它不是来自文件,而是来自一些外部代码,但这个问题可以很容易地通过一个文件来再现)