在GDI +中使用自定义透明度绘制图像

Dav*_*ten 4 .net transparency gdi+ image

我使用Drawing.Graphics对象和DrawImage()函数在Control上绘制了大量图像(所有尺寸= 24x24 pixelformat = 32BppPArgb).可以缩小我的应用程序,这意味着Graphics对象附加了一个Transform Matrix,它控制缩放和平移.

当缩放率低于50%时,绘制这些图标毫无意义,但我想从绘图图标过渡到不绘制图标更平滑.即,从70%开始,应该使用额外的透明度因子绘制图标,以便它们在50%时变得完全透明.

如何绘制具有额外透明度的位图,而不会花费比DrawImage()更长的时间?

谢谢,大卫

Dan*_*röm 7

您只需创建一个合适的ColorMatrix,用它初始化一个ImageAttributes对象,并将该ImageAttributes对象传递给一个重载版本的Graphics.DrawImage.此示例将为您提供50%的透明度:

  float[][] matrixAlpha =
  {
   new float[] {1, 0, 0, 0, 0},
   new float[] {0, 1, 0, 0, 0},
   new float[] {0, 0, 1, 0, 0},
   new float[] {0, 0, 0, 0.5f, 0}, 
   new float[] {0, 0, 0, 0, 1}
  }; 
  ColorMatrix colorMatrix = new ColorMatrix( matrixAlpha );

  ImageAttributes iaAlphaBlend = new ImageAttributes();
  iaAlphaBlend.SetColorMatrix(
   colorMatrix,
   ColorMatrixFlag.Default,
   ColorAdjustType.Bitmap );
Run Code Online (Sandbox Code Playgroud)