如何在.NET中以编程方式设置alpha通道并绘制图像?

3

这是一个使用C++/CLI在Windows窗体上的.NET应用程序。我有一张JPEG图片,想要在客户区域中绘制出来以表示一个对象。在某些情况下,比如当用户拖动对象时,我想要以一定的透明度绘制该对象。

有哪些可用的方法可以实现这个功能?

2个回答

4

2
我会尝试创建一个50%透明度的第二个图像。作为System.Drawing.Bitmap,您可以获取和设置其像素(GetPixel,SetPixel):
Color pixelColor = bitmap.GetPixel(x,y);
Color transparentPixelColor = MakePixelTransparent(pixelColor);
bitmap.SetPixel(x,y,transparentPixelColor);

MakePixelTransparent()会在提供的颜色中设置alpha值(类似于获取ARGB值,设置A字节并创建一个新的颜色,以新的Argb值为基础)。

这是我会尝试的方法(虽然我没有实际尝试过)...

编辑: 出于好奇,我现在尝试了一下:

Bitmap bitmap = new Bitmap( "YourImageFile.jpg" );
bitmap.MakeTransparent();
for ( int y = 0; y < bitmap.Height; y++ ) {
    for ( int x = 0; x < bitmap.Width; x++ ) {
        Color pixelColor = bitmap.GetPixel( x, y );
        Color transparentPixelColor = Color.FromArgb( pixelColor.ToArgb() & 0x7fffffff );
        bitmap.SetPixel( x, y, transparentPixelColor );
    }
}
e.Graphics.DrawImage( bitmap, 10, 10 );

这样可以使图像的某些部分变为透明,从而实现作用。...


1
哎呀,这太慢了...使用GetPixel和SetPixel循环。在这里,我将研究使用byte[]或int*的方法。 http://www.codeproject.com/KB/GDI-plus/pointerlessimageproc.aspx - Dykam
好的,我在大约3分钟内就破解了它。我并没有声称它会非常快。 - EricSchaefer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接