剪切透明部分图像

更新后的图片: 在此处输入图像描述

非常感谢你,但是我想做一些与众不同的事情,在这里将每个矩形切割为一个sperate图像。让我们先尝试找到蓝色块边界。 听起来很难,但实际上很简单。

看看我到目前为止做了什么:

private unsafe Bitmap CodeImage(Bitmap bmp) { Bitmap bmpRes = new Bitmap(bmp.Width, bmp.Height); BitmapData bmData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, bmp.PixelFormat); IntPtr scan0 = bmData.Scan0; int stride = bmData.Stride; int nWidth = bmp.Width; int nHeight = bmp.Height; int minX = 10000 ; int maxX = -10000; int minY = 10000; var maxY = -10000; bool found = false; for (int y = 0; y < nHeight; y++) { byte* p = (byte*)scan0.ToPointer(); p += y * stride; for (int x = 0; x < nWidth; x++) { if (p[3]!=0) //Check if pixel is transpert; { found = true; if (x < minX) minX = x; if (y  maxX) maxX = x; if (y > maxY) maxY = y; } else { if (found) { Rectangle temp = new Rectangle(minX, minY, maxX - minX, maxY-minY); return bmp.Clone(temp, bmp.PixelFormat); } } p += 4; } } return null; } 

你实际上是写,我应该像这样计算宽度: int width = maxX - minX; 它实际上工作..但高度为0 ….

尝试这个男人输出几乎正确的矩形与这些边界:(200,800,400,高度为0 )。 我只是在我的算法中使用了你的部分代码而且你是对的但是现在有一点高度的问题如果你看看我会非常感激

我将用伪代码编写这个,因为你应该可以将它应用于任何类型的图像或语言……

 var minX = 10000 var maxX = -10000 var minY = 10000 var maxY = -10000 for (var y = 0 to height) { for (var x = 0 to width) { if (pixel(x,y).Color != transparent) { if (x < minX) minX = x if (y < minY) minY = y if (x > maxX) maxX = x if (y > maxY) maxY = y } } } var cropRectangle = (minX, minY, maxX, maxY) 

您现在可以在位图上使用标准函数来获取该区域,该区域应该是由非透明像素限定的区域。