繁体   English   中英

C#裁剪特定像素上的图像

[英]c# crop image on specific pixel

我只想在特定部分从完整图像中裁剪图像,这是我的代码

    private unsafe Bitmap GetDiffBitmap(Bitmap bmp)
    {

        BitmapData bmDataRes;
        bmpRes = new Bitmap(bmp.Width, bmp.Height);

        bmData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, bmp.PixelFormat);

        bmDataRes = bmpRes.LockBits(new Rectangle(0, 0, bmpRes.Width, bmpRes.Height), System.Drawing.Imaging.ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);

        IntPtr scan0 = bmData.Scan0;

        IntPtr scan0Res = bmDataRes.Scan0;


        int stride = bmData.Stride;

        int strideRes = bmDataRes.Stride;

        int nWidth = bmp.Width;
        int nHeight = bmp.Height;

        for(int y = 0; y < nHeight; y++)

        {

            byte* p = (byte*)scan0.ToPointer();
            p += y * stride;

            byte* pRes = (byte*)scan0Res.ToPointer();
            pRes += y * strideRes;

            for (int x = 0; x < nWidth; x++)
            {
                //always get the complete pixel when differences are found
                if (p[0] ==255)
                {
                          pRes[0] = p[0];
                    pRes[1] = p[1];
                    pRes[2] = p[2];

                    //alpha (opacity)
                    pRes[3] = p[3];
                }

                else
                {



                    bmpRes.UnlockBits(bmDataRes);

                    break;


                }


                p += 4;

                pRes += 4;
            }

        }


        return bmpRes;


    }

如您所见,我只想在红色字节为255时复制像素,如果不是,则立即停止并中断。 我想找到连续的红色部分。 但是当我释放位图bmpRes.UnlockBits(bmDataRes);时,我在那条线上得到了一个奇怪的异常 例外A generic error occurred in GDI+为什么会引发该错误?

你应该打破outter for循环也。

实际上,您尝试多次尝试解锁比特。

或更简单地说,您可以更改

bmpRes.UnlockBits(bmDataRes);
break;

进入

bmpRes.UnlockBits(bmDataRes);
return bmpRes;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM