这是使用C++/CLI的Windows窗体上的.NET应用程序。我有一个JPEG,我想绘制在我的客户区域来表示一个对象。在某些场合 - 比如当用户拖动物体时 - 我想用一些透明度绘制对象。如何在.NET中以编程方式设置Alpha通道来绘制图像?
什么是各种可用的方法来做到这一点?
这是使用C++/CLI的Windows窗体上的.NET应用程序。我有一个JPEG,我想绘制在我的客户区域来表示一个对象。在某些场合 - 比如当用户拖动物体时 - 我想用一些透明度绘制对象。如何在.NET中以编程方式设置Alpha通道来绘制图像?
什么是各种可用的方法来做到这一点?
我会尝试创建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);
作品。这样,你也可以使图像透明的只有部分...
哎哟,那就是慢...使用GetPixel和SetPixel进行循环。在这里,我将研究使用byte []或int *。 http://www.codeproject.com/KB/GDI-plus/pointerlessimageproc.aspx – Dykam 2009-08-15 07:17:52
呃,我在3分钟左右就砍了。我没有声称它会快到任何地方。 – EricSchaefer 2009-08-15 09:26:16