加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 17:39:09 所属栏目:百科 来源:网络整理
导读:我有一个PNG图像从 Android中的DrawingView发送到WCF服务.图像以32位发送,并具有透明背景.我想用白色替换透明色(缺少更好的单词)背景.到目前为止我的代码看起来像这样: // Converting image to Bitmap objectBitmap i = new Bitmap(new MemoryStream(Conver
我有一个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,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中用白色替换透明背景?

PS.图像为灰度.

解决方法

这将绘制到给定的颜色:
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通道将绘制的图像与背景混合.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读