我正在使用以下代码来调整tif的大小。 tif具有为透明度设置的alpha通道。我正在尝试调整此图像的大小并尊重透明度,但目前它正以黑色背景出现。有什么想法吗?
public static void ResizeImage(string OriginalImagePath, string NewImagePath, int Width, int Height)
{
Size NewSize = new Size(Width, Height);
using (Image OriginalImage = Image.FromFile(OriginalImagePath))
{
//Graphics objects can not be created from bitmaps with an Indexed Pixel Format, use RGB instead.
PixelFormat Format = OriginalImage.PixelFormat;
if (Format.ToString().Contains("Indexed"))
Format = PixelFormat.Format24bppRgb;
using (Bitmap NewImage = new Bitmap(NewSize.Width, NewSize.Height, OriginalImage.PixelFormat))
{
using (Graphics Canvas = Graphics.FromImage(NewImage))
{
Canvas.SmoothingMode = SmoothingMode.AntiAlias;
Canvas.InterpolationMode = InterpolationMode.HighQualityBicubic;
Canvas.PixelOffsetMode = PixelOffsetMode.HighQuality;
Canvas.DrawImage(OriginalImage, new Rectangle(new Point(0, 0), NewSize));
NewImage.Save(NewImagePath, OriginalImage.RawFormat);
}
}
}
}
}
答案 0 :(得分:0)
试试这个:
if (Format.ToString().Contains("Indexed"))
Format = PixelFormat.Format32bppArgb;
Format32bppArgb
指定像素格式的Alpha通道。
我认为你打算这样做:
using (Bitmap NewImage = new Bitmap(NewSize.Width, NewSize.Height, Format))
<强> 编辑: 强>
实际上,请尝试将NewImage
上的像素格式强制转换为Format32bppArgb
,如下所示:
using (Bitmap NewImage = new Bitmap(NewSize.Width, NewSize.Height,
PixelFormat.Format32bppArgb))
答案 1 :(得分:0)
Canvas.Clear(Color.Transparent)
在你快乐之前。
答案 2 :(得分:0)
我实际上发现,由于使用photoshop以tiff格式存储透明度的方式,最好通过自动化photoshop然后处理生成的png来创建png。