我有一个图像,我想获取256X256像素的每个正方形,找到均值颜色,然后用所述颜色绘制该正方形。 问题:似乎在第一个平方之后,处理突然停止,但是在执行程序之后,我可以看到索引很好。我不知道问题出在我的计算机系统中是文件写入还是“ Bitmap”类函数的错误使用。
原件:
结果:
代码:
public const int big =256;
public const int small = 16;
static void Main(string[] args)
{
Bitmap bt = new Bitmap(@"C:\Users\mishe\Desktop\00_sorted images - training\general shores\agulhas_oli_2016146_lrg.jpg");
Bitmap bt2 = bt;
Color MeanColor;
double r = 0;
double g = 0;
double b = 0;
int i = 0;
int j = 0;
//big loop to go over all image
for (i = 0; i < bt.Height-257; i+=256)
{
for (j = 0; j < bt.Width-257; j+=256)
{
/////////////////////////////
//small loop on 1 square to get the mean color of the area
for (int x = i; x < big; x++)
{
for (int y = j; y < big; y++)
{
r += bt.GetPixel(x, y).R;
g += bt.GetPixel(x, y).G;
b += bt.GetPixel(x, y).B;
}
}
/////////////////////////////
r = r / Math.Pow(big, 2);
g = g / Math.Pow(big, 2);
b = b / Math.Pow(big, 2);
MeanColor = Color.FromArgb((int)r, (int)g, (int)b);
/////////////////////////////
//small loop on the same square to set the color
for (int x = i; x < big; x++)
{
for (int y = j; y < big; y++)
{
bt2.SetPixel(x, y, MeanColor);
}
}
/////////////////////////////
}
}
bt2.Save(@"C:\Users\mishe\Desktop\compressed image.jpg", ImageFormat.Jpeg);
}
答案 0 :(得分:3)
此行:
//small loop on 1 square to get the mean color of the area
for (int x = i; x < big; x++)
在第一个正方形之后,x将为256,因此不会进行小循环。
我认为您想要
for (int x = i; x < i + big; x++)
或者您的小循环可能是:
for (int x = 1; x < big; x++)
,然后在循环内添加大小值:
r += bt.GetPixel(i + x, j + y).R;