据我所知,改变 alpha 通道的唯一方法是,如您所说,使用 SetPixel 或(当然,更好的)指针。根据您要执行的操作,您可以创造性地使用 ColorMatrix。这将使您可以更改 DrawImage 操作,以便在绘制时可以互换 R/G/B/A 的含义。试试这个以获得一个想法:
using ( var bmp = new Bitmap( 100, 100 ) )
using ( var g = Graphics.FromImage( bmp ) )
using ( var ia = new ImageAttributes() )
{
float R = 1;
float G = 0;
float B = 0;
ia.SetColorMatrix( new ColorMatrix( new float[][] {
new float[] {1, 0, 0, R, 0},
new float[] {0, 1, 0, G, 0},
new float[] {0, 0, 1, B, 0},
new float[] {0, 0, 0, 0, 0},
new float[] {0, 0, 0, 0, 1}} ) );
g.Clear( Color.White );
g.FillEllipse( Brushes.Blue, 10, 10, 30, 30 );
g.FillEllipse( Brushes.Red, 60, 10, 30, 30 );
g.FillEllipse( Brushes.Green, 10, 60, 30, 30 );
g.FillEllipse( Brushes.Black, 60, 60, 30, 30 );
e.Graphics.DrawImage(
bmp,
new Rectangle( 0, 0, 100, 100 ),
0, 0, 100, 100,
GraphicsUnit.Pixel,
ia );
}
尝试将 R/G/B 分别设置为 1,看看它如何改变呈现为纯色/透明的颜色。但是,如果您想直接更改位图的 Alpha 通道,请执行以下操作:GDI+ 中的软边图像。