裁剪区域不是矩形时裁剪图像

时间:2016-12-17 18:02:40

标签: c# .net image-processing

如果所选区域不是完美的矩形,如何从图像中裁剪特定区域?在这个image中,如何将红色以外的区域裁剪成不同的部分?

1 个答案:

答案 0 :(得分:0)

为了隔离图像的非矩形区域和/或基于颜色的区域,一种强大的方法是使用32位图像的alpha /透明属性。例如,左侧的图像是原始的24位图像(无alpha),右侧是将该图像转换为32位的结果,并为所有白色或红色的像素设置alpha = 0原始图像。实际上,这可以使您的图像非矩形。

enter image description here

这个代码非常简单。下面的方法采用输入位图(24位),生成一个空白的32位图像,并将所有像素从源传输到目标,将所有白色或红色像素的alpha设置为0.

public Bitmap ModifyAlpha(Bitmap bmap)
    {
        Bitmap bmap32 = new Bitmap(bmap.Width, bmap.Height, PixelFormat.Format32bppArgb);

        Color theColor = new Color();
        Color newColor = new Color();

        for (int i = 0; i < bmap.Width; i++)
        {
            for (int j = 0; j < bmap.Height; j++)
            {
                // Get the color of the pixel at (i,j)
                theColor = bmap.GetPixel(i, j);

                // Set the pixel color/range you want to make transparent
                if ((theColor.R > 250 && theColor.G > 250 && theColor.B > 250) ||
                    (theColor.R > 250))
                {
                    newColor = Color.FromArgb(0, theColor.R, theColor.G, theColor.B);
                    bmap32.SetPixel(i, j, newColor);
                } else
                {
                    bmap32.SetPixel(i, j, theColor);
                }
            }
        }
        return bmap32;
     }