【发布时间】:2015-11-05 07:11:06
【问题描述】:
如您所见,它是一个 1920x1080 的图像,只有红色的小矩形,我想只剪切该图像的非透明像素(在我们的例子中只有小块)。
所以我开始扫描这张图片并获取非 transpert 块边界。 这是我到目前为止所做的:
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;
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 not transpert;
{
if (x < minX)
minX = x;
if (y < minY)
minY = y;
if (x > maxX)
maxX = x;
if (y > maxY)
maxY = y;
}
p += 4;
}
}
bmp.UnlockBits(bmData);
Rectangle temp = new Rectangle(minX, minY,maxX, maxY);
// MessageBox.Show(minX.ToString() + "," + minY.ToString() + "," + maxX.ToString() + "," + maxY.ToString());
return bmp.Clone(temp,bmp.PixelFormat);
}
但是我得到了奇怪的结果...我认为这是一个简单的错字我无法弄清楚..或者代码的逻辑可能有问题...
我将不胜感激并获得帮助!
【问题讨论】:
-
您不能确保您的字节级访问处理 4 字节 RGBA 值,您需要选择一个特定的像素格式来访问以确保正确。您是否已经验证过像素格式是否正确?
-
另外,“奇怪的结果”你需要解释你的意思。
标签: c# pointers image-processing pixel