求救,以下是我做的一个灰度直方图的代码。麻烦帮我看看到底是哪里出现问题了
在设计界面上放了一个picturebox1的控件,bmp在外部调用的已经有个了一个实例
public partial class zhifangtu : Form
{
public Bitmap bmp;
public zhifangtu(Bitmap temp)
{
InitializeComponent();
bmp = new Bitmap(temp);
}
private void zhifangtu_Load(object sender, EventArgs e)
{
int[,] h = new int[bmp.Width, bmp.Height];
int[] t = new int[256];
Color c = Color.FromArgb(128);
int i, j;
int r;
int max = 0;
for (i = 0; i < bmp.Width; i++)
{
for (j = 0; j < bmp.Height; j++)
{
c = bmp.GetPixel(i, j);
r = (c.R + c.G + c.B) / 3;
h[i, j] = r;
t[r] = t[r] + 1;
}
}
max = t[0];
for (i = 1; i < t.Length ; i++)
{
if (t[i] > max)
{
max = t[i];
}
}
Bitmap box3 = new Bitmap(256, max);
c = Color.FromArgb(0,0,0);
for (r = 0; r < 256; r++)
{
for (j = 1; j <=t[r]; j++)
{
box3.SetPixel(r, max-j, c);
}
pictureBox1.Refresh();
pictureBox1.Image = box3;
}
this.pictureBox1.Image = box3;
}
}
}
我这个程序很奇怪,有的图片载入后可以画出直方图,有的图片载入后却不能,产生错误,说”参数无效!“,”未处理ArgumentException“。我真的是搞不懂呀,请各位高人帮帮忙,
------解决方案--------------------
问题之一:
没有做正规化(Normalization), 对大图, max动辄到几万,几百万.
Bitmap box3 = new Bitmap(256, max); 会出问题.
你可以把把最大值设定为比如说256, 作一下Normalization:
C# code
for (i = 0; i < t.Length; i++)
{
t[i] = t[i] * 256 / max; //或t[i] = (int)(t[i] * 256.0f / max);
}
------解决方案--------------------
详细的错误信息贴出来;
你打个断点调试一下,看看在什么地方出错的