在C#中创建一个包含JPG和AlphaChannel的PNG

时间:2011-09-09 11:30:15

标签: c# png jpeg mask alphablending

如果我有两个带图像和Alpha通道的JPG文件,我该如何创建PNG文件?

JPG Image + JPG Mask - > PNG具有透明度

我尝试过WPF解决方案:

image.OpacityMask = new ImageBrush ( new BitmapImage ( uriMask ) );

和System.Drawing。

Image bmpMask = Image.FromFile ( maskFilePath );
gfxNewImage.SetClip (  Graphics.FromImage (bmpMask) );

但我有两个问题(黑色背景或全黑)

任何想法或例子?

THANKYOU

2 个答案:

答案 0 :(得分:2)

好的,我们假设你有一个JPEG图片和一个带Alpha通道的Png图片。 你应该这样做,只有当这两个图像大小相同时它才会起作用。

Bitmap jpegFile = new Bitmap("JpegFile.jpg");
Bitmap alphaFile = new Bitmap("Png.jpg");

for(int i=0;i<jpegFile.Width;i++)
{
   for(int j=0;j<jpegFile.Height;j++)
    {
       Color withAlpha = jpegFile.GetPixel(i,j);
           withAlpha.A = alphaFile.GetPixel(i,j).A;
       jpegFile.SetPixel(withAlpha);
    }
}

答案 1 :(得分:1)

尝试使用Graphics对象的参数:

using (var g = Graphics.FromImage(bmpMask))
{
    g.SmoothingMode = SmoothingMode.AntiAlias;
    g.InterpolationMode = InterpolationMode.HighQualityBicubic;
    g.DrawImage(source, 0, 0, width, height);
}