在c#中导出透明图像?

时间:2010-10-25 09:49:40

标签: c# transparency

我已经在c#中编辑了一个位图,并且对于每个像素,如果条件为真,我将其更改为某种颜色,否则我将颜色设置为Color.Transparent(操作使用getPixel / setPixel完成) 。我以.png格式导出图像,但图像不透明。任何想法为什么或如何做?

此致 Alexandru Badescu

这是代码: - 这里我加载图像并转换为PixelFormat.Format24bppRgb,如果png

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

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

- 这是用于在矩阵中的某个位置之后更改像素

for(int i = startX; i< endX; 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 个答案:

答案 0 :(得分:5)

因为pixelformat。 以下是您的示例代码:

        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

答案 1 :(得分:0)

我需要更多的代码来验证,但我最好的猜测是你首先在位图上写一些东西来清除它(比如用白色填充它),然后用Color.Transparent制作透明像素在上面。这将无法正常工作,因为白色(或其他任何)透明顶部仍为白色。

答案 2 :(得分:0)

如果你在代码中创建了一个位图,它很可能是24位,并且不支持alpha混合/透明。

提供创建代码,我们应该能够提供帮助。