這是使用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