Прозрачность альфа-канала и изменение размера файлов изображений - PullRequest
2 голосов
/ 13 августа 2010

Я использую следующий код для изменения размера tif.TIFF имеет альфа-канал для прозрачности.Я пытаюсь изменить размер этого изображения и соблюдать прозрачность, но в данный момент он выходит на черном фоне.Есть идеи?

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 голосов
/ 13 августа 2010
Canvas.Clear(Color.Transparent)

до того, как вы слили.

0 голосов
/ 20 мая 2011

Я действительно обнаружил, что из-за того, как прозрачность хранится в формате TIFF с Photoshop, было лучше создавать PNG, автоматизируя Photoshop, а затем обрабатывая полученный PNG.

0 голосов
/ 13 августа 2010

Попробуйте это:

if (Format.ToString().Contains("Indexed"))
    Format = PixelFormat.Format32bppArgb;

Format32bppArgb указывает альфа-канал в пиксельном формате.

И я думаю, что вы хотели сделать это:

using (Bitmap NewImage = new Bitmap(NewSize.Width, NewSize.Height, Format))

EDIT:

На самом деле, попробуйте просто принудительно увеличить формат пикселя на NewImage до Format32bppArgb, например:

using (Bitmap NewImage = new Bitmap(NewSize.Width, NewSize.Height,
    PixelFormat.Format32bppArgb))
...