私は半透明のテスト画像を作成しました.128-alpha黒で塗りつぶしました。 WPFネイティブとGDI interopの2つの方法の間で交互に描画します。彼らはまったく違う。 WPFの1が正しく行われますが、GDIの描画される前に、白い最初に対してブレンドしていると思われます。WPF/GDI interop:正しいアルファを取得するにはどうすればよいですか?
写真に対して描かれている場合、GDIの一部はいても、その下に何を明るく
コードはこのように書き:
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);
}
,0,0,128色はその下にあるものは何でも暗くなければなりません
2番目の画像では、WPFのRectサイズが重複していないことを示すように変更しました。
半透明のGDIイメージを正しく描画するにはどうすればよいですか?
(はい、それは本当に複雑な理由のためにGDIのイメージである必要があります - 現実にはそれはファイルから、いくつかの外部コードから付属していませんが、問題は、ファイルを簡単に再生可能です)
少なくとも、私は中間フォーマットとしてJPEGを使用することを提案していません...信じているかどうかは信じていますが、正確にそれを示唆する検索ヒットが数多くあります! –