Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.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# 裁剪区域不是矩形时裁剪图像_C#_.net_Image Processing - Fatal编程技术网

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

C# 裁剪区域不是矩形时裁剪图像,c#,.net,image-processing,C#,.net,Image Processing,当所选区域不是完美矩形时,如何从图像中裁剪特定区域?在这种情况下,如何将红色以外的区域裁剪成不同的部分?要隔离图像的非矩形区域和/或基于颜色的区域,一个强大的方法是使用32位图像的alpha/透明度属性。例如,左侧的图像是原始的24位图像(无alpha),右侧的图像是将该图像转换为32位并将原始图像中所有白色或红色像素的alpha设置为0的结果。实际上,这可以使图像非矩形 这方面的代码相当简单。下面的方法获取一个输入位图(24位),生成一个空白的32位图像,并将所有像素从源传输到目标,将所有白

当所选区域不是完美矩形时,如何从图像中裁剪特定区域?在这种情况下,如何将红色以外的区域裁剪成不同的部分?

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

这方面的代码相当简单。下面的方法获取一个输入位图(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;
     }
公共位图修改Alpha(位图bmap)
{
位图bmap32=新位图(bmap.Width、bmap.Height、PixelFormat.Format32bppArgb);
颜色颜色=新颜色();
Color newColor=新颜色();
对于(int i=0;i250和颜色G>250和颜色B>250)||
(颜色R>250)
{
newColor=Color.FromArgb(0,Color.R,Color.G,Color.B);
bmap32.SetPixel(i,j,newColor);
}否则
{
bmap32.SetPixel(i,j,颜色);
}
}
}
返回bmap32;
}

图像只能是矩形的。看这张照片,我不知道你想要什么。。也许我猜这取决于你所说的“作物”是什么意思。如果它是一个ARGB图像(带有alpha/透明度),并且您想要使某个颜色的像素透明,例如,您可以执行Bitmap.GetPixel()并检查您想要隐藏的颜色,然后调整该像素的alpha。请帮个忙,读一本关于图像处理基础知识的书或至少一些教程。。。可能有帮助的术语:aoi、roi、maskInteresting问题-您有更高分辨率的图像吗?