System.Drawing.Image 型のオブジェクトがあり、特定の色 (黒など) を持つすべてのピクセルを透明にしたいと考えています (つまり、このピクセルのアルファを 0 に設定します)。
これを行う最善の方法は何ですか?
System.Drawing.Image 型のオブジェクトがあり、特定の色 (黒など) を持つすべてのピクセルを透明にしたいと考えています (つまり、このピクセルのアルファを 0 に設定します)。
これを行う最善の方法は何ですか?
良いアプローチの 1 つは、ImageAttributesクラスを使用して、描画時に再マップする色のリストをセットアップすることです。これの利点は、優れたパフォーマンスと、リマップ カラーを非常に簡単に変更できることです。このコードのようなものを試してください...
ImageAttributes attribs = new ImageAttributes();
List<ColorMap> colorMaps = new List<ColorMap>();
//
// Remap black top be transparent
ColorMap remap = new ColorMap();
remap.OldColor = Color.Black;
remap.NewColor = Color.Transparent;
colorMaps.Add(remap);
//
// ...add additional remapping entries here...
//
attribs.SetRemapTable(colorMaps.ToArray(), ColorAdjustType.Bitmap);
context.Graphics.DrawImage(image, imageRect, 0, 0,
imageRect.Width, imageRect.Height,
GraphicsUnit.Pixel, attribs);
Image から Bitmap を構築し、その Bitmap で MakeTransparent() を呼び出します。透明としてレンダリングする色を指定できます。
それが画像であることだけを知っていますか?ビットマップの場合は、LockBits を呼び出し、すべてのピクセルをチェック/修正してから、ビットを再度ロック解除できます。