我使用Drawing.Graphics对象和DrawImage()函数在Control上绘制了大量图像(所有尺寸= 24x24 pixelformat = 32BppPArgb)。可以在我的应用程序中缩小,这意味着Graphics对象附加了一个Transform Matrix,它控制着缩放和平移。
当缩放率低于50%时,绘制这些图标毫无意义,但我想从绘图图标过渡到不绘制图标更平滑。即,从70%开始,应该使用额外的透明度因子绘制图标,以便它们在50%时变得完全透明。
如何绘制具有额外透明度的位图,而不会花费比DrawImage()更长的时间?
谢谢, 大卫
答案 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 );