我有两个图像,我想把一个放在另一个上面,让第一个透明。我正在使用此代码,但透明度根本不起作用。第二张图片完全覆盖了第一张图片。我正在使用C#,Framework 4.5,Visual Studio 2012
static void Main(string[] args)
{
Image imageBackground = Image.FromFile(@"e:\picstest\profile.png");
Image imageOverlay = SetImageOpacity(Image.FromFile(@"e:\picstest\flag.png"), 50);
Image img = new Bitmap(imageBackground.Width, imageBackground.Height);
using (Graphics gr = Graphics.FromImage(img))
{
gr.DrawImage(imageBackground, new Point(0, 0));
gr.DrawImage(imageOverlay, new Point(0, 0));
}
string outputFileName = @"e:\picstest\output.png";
using (MemoryStream memory = new MemoryStream())
{
using (FileStream fs = new FileStream(outputFileName, FileMode.Create, FileAccess.ReadWrite))
{
img.Save(memory, ImageFormat.Jpeg);
byte[] bytes = memory.ToArray();
fs.Write(bytes, 0, bytes.Length);
}
}
}
public static Image SetImageOpacity(Image img, float opacity)
{
Bitmap bmp = new Bitmap(img.Width, img.Height); // Determining Width and Height of Source Image
Graphics graphics = Graphics.FromImage(bmp);
ColorMatrix colormatrix = new ColorMatrix();
colormatrix.Matrix33 = opacity;
ImageAttributes imgAttribute = new ImageAttributes();
imgAttribute.SetColorMatrix(colormatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
graphics.DrawImage(img, new Rectangle(0, 0, bmp.Width, bmp.Height), 0, 0, img.Width, img.Height, GraphicsUnit.Pixel, imgAttribute);
graphics.Dispose(); // Releasing all resource used by graphics
return bmp;
}
}
}
答案 0 :(得分:0)
通过将不透明度值设置为小于1来修复它,显然大于1使其不透明。