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

时间:2009-11-14 17:57:02

标签: .net image gdi+ transparency

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

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

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

谢谢, 大卫

1 个答案:

答案 0 :(得分: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 );