Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在PNG图像中用白色替换透明背景_C#_.net_Colors_Bitmap - Fatal编程技术网

C# 在PNG图像中用白色替换透明背景

C# 在PNG图像中用白色替换透明背景,c#,.net,colors,bitmap,C#,.net,Colors,Bitmap,我有一个PNG图像正在从Android中的DrawingView发送到WCF服务。图像以32位格式发送,背景透明。我想把透明的颜色(因为没有更好的词)背景换成白色。到目前为止,我的代码如下所示: // Converting image to Bitmap object Bitmap i = new Bitmap(new MemoryStream(Convert.FromBase64String(image))); // The image that is send from the tablet

我有一个PNG图像正在从Android中的
DrawingView
发送到WCF服务。图像以32位格式发送,背景透明。我想把透明的颜色(因为没有更好的词)背景换成白色。到目前为止,我的代码如下所示:

// Converting image to Bitmap object
Bitmap i = new Bitmap(new MemoryStream(Convert.FromBase64String(image)));
// The image that is send from the tablet is 1280x692
// So we need to crop it
Rectangle cropRect = new Rectangle(640, 0, 640, 692);
//HERE
Bitmap target = i.Clone(cropRect, i.PixelFormat);
target.Save(string.Format("c:\\images\\{0}.png", randomFileName()),
System.Drawing.Imaging.ImageFormat.Png);
除了图像有透明的背景外,上面的效果很好。我注意到,在Paint.NET中,您可以简单地将PNG格式设置为8位,并将背景设置为白色。但是,当我尝试使用:

System.Drawing.Imaging.PixelFormat.Format8bppIndexed
我得到的只是一张全黑的照片

问:如何在png中用白色替换透明背景


注:图像为灰度。

这将绘制到给定的颜色上:

Bitmap Transparent2Color(Bitmap bmp1, Color target)
{
    Bitmap bmp2 = new Bitmap(bmp1.Width, bmp1.Height);
    Rectangle rect = new Rectangle(Point.Empty, bmp1.Size);
    using (Graphics G = Graphics.FromImage(bmp2) )
    {
        G.Clear(target);
        G.DrawImageUnscaledAndClipped(bmp1, rect);
    }
    return bmp2;
}

这利用了
G.CompositingMode=System.Drawing.Drawing2D.CompositingMode.SourceOver,这是默认值。它根据绘制图像的alpha通道将绘制图像与背景混合

您尝试索引格式的原因是什么?您尝试过24个bpp格式中的任何一种吗?您应该能够创建一个白色位图并在其上绘制图像,然后另存为任何格式。@NicoSchertler-Hmm。。大部分我都试过了,我想不是全部。Format24bppRgb给出了相同的结果。@TaW这是一个正确的答案。取消删除它,这样我就可以标记itOK了,但我仍然在用我拥有的一个PNG进行斗争,这并不像我预期的那样有效。。我会在找到原因后更新