【C#学习笔记】C#判断图片的背景是否为透明,如果为透明则修改图片的背景为白色,如果不透明则不修改图片的背景颜色

/// <summary>
            ///判断图片的背景是否为透明
            ///如果为透明则修改图片的背景为白色
            ///如果不透明则不修改图片的背景颜色
            /// </summary>
            /// <param name="src"></param>
            /// <returns></returns>
            public Bitmap PTransparentAdjust(Bitmap src)
            {
                try
                {
                    int w = src.Width;
                    int h = src.Height;
                    Bitmap dstBitmap = new Bitmap(src.Width, src.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
                    System.Drawing.Imaging.BitmapData srcData = src.LockBits(new System.Drawing.Rectangle(0, 0, w, h), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
                    System.Drawing.Imaging.BitmapData dstData = dstBitmap.LockBits(new System.Drawing.Rectangle(0, 0, w, h), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
                    unsafe
                    {
                        byte* pIn = (byte*)srcData.Scan0.ToPointer();
                        byte* pOut = (byte*)dstData.Scan0.ToPointer();
                        byte* p;
                        int stride = srcData.Stride;
                        int r, g, b, a;
                        for (int y = 0; y < h; y++)
                        {
                            for (int x = 0; x < w; x++)
                            {
                                p = pIn;
                                b = pIn[0];
                                g = pIn[1];
                                r = pIn[2];
                                a = pIn[3];
                                if (a == 0)
                                {
                                    pOut[1] = (byte)255;
                                    pOut[2] = (byte)255;
                                    pOut[3] = (byte)255;
                                    pOut[0] = (byte)255;
                                }
                                else
                                {
                                    pOut[1] = (byte)g;
                                    pOut[2] = (byte)r;
                                    pOut[3] = (byte)a;
                                    pOut[0] = (byte)b;
                                }
                                pIn += 4;
                                pOut += 4;
                            }
                            pIn += srcData.Stride - w * 4;
                            pOut += srcData.Stride - w * 4;
                        }
                        src.UnlockBits(srcData);
                        dstBitmap.UnlockBits(dstData);
                        return dstBitmap;
                    }
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message.ToString());
                    return null;
                }

            }
”但是如果未修改工程配置的话,unsafe会报错:

"不安全代码只会在使用 /unsafe 编译的情况下出现"  

必须在工程项目的项目属性→生成→"允许不安全代码(W)"勾选就不会报错了



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值