Alpha通道透明度和调整图像文件大小

时间:2010-08-13 08:33:34

标签: c# image image-processing gdi+

我正在使用以下代码来调整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);
                    }
                }
            }
        }

    }

3 个答案:

答案 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。