裁剪区域不是矩形时裁剪图像
Posted
技术标签:
【中文标题】裁剪区域不是矩形时裁剪图像【英文标题】:Crop an image while cropping area is not rectangle 【发布时间】:2016-12-17 18:02:40 【问题描述】:如果所选区域不是完美的矩形,如何从图像中裁剪特定区域?在这个image中,如何将红色以外的区域裁剪成不同的部分?
【问题讨论】:
图像只能是矩形的。看着图片我不知道你想要什么.. 也许something like this? 我想这取决于你所说的“作物”是什么意思。如果它是 ARGB 图像(带有 alpha/透明度)并且您想要使像素具有某种颜色,例如透明,您可以执行 Bitmap.GetPixel() 并检查您想要隐藏的颜色,然后调整我想该像素的 alpha 值。 帮自己一个忙,读一本关于图像处理基础的书或至少一些教程……可能有帮助的术语:aoi、roi、mask 有趣的问题 - 你有更高分辨率的图片吗? 【参考方案1】:要隔离图像的非矩形区域和/或基于颜色的区域,一种强大的方法是使用 32 位图像的 alpha/transparency 属性。例如,左边的图像是原始的 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;
【讨论】:
以上是关于裁剪区域不是矩形时裁剪图像的主要内容,如果未能解决你的问题,请参考以下文章