如何获取位图对象的确切部分
how to get exact part of Bitmap object
我正在使用 C# 中位图的 getPixels 来检测颜色模式。我有一个图像文件,但我只需要研究文件的一部分(图像内部的一个矩形,四面都裁剪了 5%)
我想知道文件的原点 (0,0) 在哪里,所以我可以使用一个遍历所有像素的简单函数(参见代码)。有没有关于 0,0 在哪里的约定???左上方?右上?左下方?右下角?
我在这里给你展示的功能对我来说没问题,不需要更有效的方法来检查文件,因为文件不够大。如果我浏览所有文件,那么最多 1 秒。我只需要了解 x 轴和 y 轴的位置
谢谢,
乔什.
ulong CountPixels(Bitmap bm, Color target_color)
{
// Loop through the pixels.
ulong matches = 0;
for (int y = 0; y < bm.Height; y++)
{
for (int x = 0; x < bm.Width; x++)
{
if (bm.GetPixel(x, y) == target_color)
{
matches++;
}
}
}
return matches;
}
您可以只获取一个矩形作为参数,然后只查看该矩形内的点,以确保矩形内的所有点都落在位图中,您需要执行 Math.Min(bmp.Height, region.Y + region.Height)
和 Math.Min(bmp.Width, region.X+Region.Width)
而不仅仅是 region.Y + region.Height
和 region.X+Region.Width
:
ulong CountPixels(Bitmap bm, Color target_color, Rectangle region)
{
// Loop through the pixels.
ulong matches = 0;
for (int y = region.Y; y < Math.Min(bmp.Height, region.Y + region.Height); y++)
{
for (int x = region.X; x < Math.Min(bmp.Width, region.X+Region.Width); x++)
{
if (bm.GetPixel(x, y) == target_color)
{
matches++;
}
}
}
return matches;
}
我正在使用 C# 中位图的 getPixels 来检测颜色模式。我有一个图像文件,但我只需要研究文件的一部分(图像内部的一个矩形,四面都裁剪了 5%) 我想知道文件的原点 (0,0) 在哪里,所以我可以使用一个遍历所有像素的简单函数(参见代码)。有没有关于 0,0 在哪里的约定???左上方?右上?左下方?右下角?
我在这里给你展示的功能对我来说没问题,不需要更有效的方法来检查文件,因为文件不够大。如果我浏览所有文件,那么最多 1 秒。我只需要了解 x 轴和 y 轴的位置
谢谢, 乔什.
ulong CountPixels(Bitmap bm, Color target_color)
{
// Loop through the pixels.
ulong matches = 0;
for (int y = 0; y < bm.Height; y++)
{
for (int x = 0; x < bm.Width; x++)
{
if (bm.GetPixel(x, y) == target_color)
{
matches++;
}
}
}
return matches;
}
您可以只获取一个矩形作为参数,然后只查看该矩形内的点,以确保矩形内的所有点都落在位图中,您需要执行 Math.Min(bmp.Height, region.Y + region.Height)
和 Math.Min(bmp.Width, region.X+Region.Width)
而不仅仅是 region.Y + region.Height
和 region.X+Region.Width
:
ulong CountPixels(Bitmap bm, Color target_color, Rectangle region)
{
// Loop through the pixels.
ulong matches = 0;
for (int y = region.Y; y < Math.Min(bmp.Height, region.Y + region.Height); y++)
{
for (int x = region.X; x < Math.Min(bmp.Width, region.X+Region.Width); x++)
{
if (bm.GetPixel(x, y) == target_color)
{
matches++;
}
}
}
return matches;
}