экспортировать прозрачные изображения в c #? - PullRequest
1 голос
/ 25 октября 2010

Я отредактировал растровое изображение в c # и для каждого пикселя я изменил его на определенный цвет, если условие было истинным, иначе я установил цвет на Color.Transparent (операции были выполнены с помощью getPixel / setPixel) , Я экспортировал изображение в формате .png, но изображение не прозрачное. Есть идеи почему или как мне это сделать?

С уважением, Александру Бадеску

вот код: - здесь я загружаю изображение и конвертирую в PixelFormat.Format24bppRgb, если png

m_Bitmap = (Bitmap) Bitmap.FromFile (openFileDialog.FileName, false);

           if(openFileDialog.FilterIndex==3) //3 is png
            m_Bitmap=ConvertTo24(m_Bitmap);

- это для изменения пикселей после определенной позиции в матрице

для (int i = startX; i

                for (int j = startY; j < endY; j++)
                {
                    if (indexMatrix[i][j] == matrixFillNumber)
                        m_Bitmap.SetPixel(j, i, selectedColor);
                    else
                        m_Bitmap.SetPixel(j, i, Color.Transparent);

                }

Ответы [ 3 ]

5 голосов
/ 25 октября 2010

Это потому что пиксельформат. Вот пример кода для вас:

        Bitmap inp = new Bitmap("path of the image to edit");
        Bitmap outImg = new Bitmap(inp.Width, inp.Height, PixelFormat.Format32bppArgb);
        outImg.SetResolution(inp.HorizontalResolution, inp.VerticalResolution);
        Graphics g = Graphics.FromImage(outImg);
        g.DrawImage(inp, Point.Empty);
        g.Dispose();
        inp.Dispose();

        ////
        // Check your condition and set pixel here (outImg.GetPixel, outImg.SetPixel)
        ////

        outImg.Save("out file path", ImageFormat.Png);
        outImg.Dispose();

это код, который требует минимального изменения вашего текущего кода. Но я бы порекомендовал вам проверить метод LockBits для лучшей производительности: http://msdn.microsoft.com/en-us/library/5ey6h79d.aspx

0 голосов
/ 25 октября 2010

Если вы создали растровое изображение в коде, оно, скорее всего, будет 24-битным и не будет поддерживать альфа-смешивание / прозрачность.

предоставит код для создания, и мы должны быть в состоянии помочь.

0 голосов
/ 25 октября 2010

Мне понадобится больше кода для проверки, но я думаю, что вы сначала пишете что-то на растровом изображении, чтобы очистить его (например, залить его белым цветом), а затем сделать прозрачные пиксели, которые вы рисуете, с Color.Transparent сверху , Это просто не будет работать, так как белые (или что-то еще) с прозрачным наверху все еще белые.

...