按钮点击代码如下:
//设置正反相图标
int lr; //判断按钮状态
private void LR_Pic_Click(object sender, EventArgs e)
{
Bitmap img1 = (Bitmap)Pic1.Image;
if (this.Pic1.Image != null)
{
Color cc = img1.GetPixel(0, 0);
MessageBox.Show(cc.ToString());
if (lr == 0)
{
LR_Pic.Image = global::识字体_Windows_.Properties.Resources.反相图标;
this.Pic2.Image = null;
this.Pic2.Image = ConvertTo1Bpp2(img1);
MessageBox.Show("1");
lr = 1;
}
else
{
LR_Pic.Image = global::识字体_Windows_.Properties.Resources.正相图标;
this.Pic2.Image = null;
this.Pic2.Image = ConvertTo1Bpp1(img1);
MessageBox.Show("2");
lr = 0;
}
}
else
{
if (lr == 0)
{
LR_Pic.Image = global::识字体_Windows_.Properties.Resources.反相图标;
lr++;
}
else
{
LR_Pic.Image = global::识字体_Windows_.Properties.Resources.正相图标;
lr--;
}
}
}
正反相的代码如下:
//图像二值化(正相)
public Bitmap ConvertTo1Bpp1(Bitmap bmp)
{
int average;
average = this.trackBar1.Value;
for (int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++)
{
//获取该点的像素的RGB的颜色
Color color = bmp.GetPixel(i, j);
int value = color.B;
Color newColor = value > average ? Color.FromArgb(0, 0, 0) : Color.FromArgb(255, 255, 255);
bmp.SetPixel(i, j, newColor);
}
}
return bmp;
}
//图像二值化(反相)
public Bitmap ConvertTo1Bpp2(Bitmap bmp)
{
int average;
average = this.trackBar1.Value;
for (int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++)
{
//获取该点的像素的RGB的颜色
Color color = bmp.GetPixel(i, j);
int value =color.B;
Color newColor = value > average ? Color.FromArgb(255, 255, 255) : Color.FromArgb(0, 0, 0);
bmp.SetPixel(i, j, newColor);
}
}
return bmp;
}
然后问题来了,第一次点击按钮和第二次点击按钮的时候,都没问题。包括弹窗提示也正常,但是从第三次点击开始,变成了每点击两次 Pic2 才会换一次图片,但是弹窗的1和2显示依旧正常。
小白求助,问题究竟出在哪了?
5 个解决方案
#1
你没有发觉原图也变色了吗,Bitmap img1 = (Bitmap)Pic1.Image;并没有产生一张图片的副本,而是直接指向你的原图,你在做转换的时候原图一起被转换了
#2
0 0 这个我倒是没注意到,因为原图一直没变过, 求指教,怎么破。
#3
#4
定义一个 空的图片 附上原图的值 把这个图片用于计算
#5
把原图先保存起来,每次转换的时候拿原图来转换
#1
你没有发觉原图也变色了吗,Bitmap img1 = (Bitmap)Pic1.Image;并没有产生一张图片的副本,而是直接指向你的原图,你在做转换的时候原图一起被转换了
#2
0 0 这个我倒是没注意到,因为原图一直没变过, 求指教,怎么破。
#3
#4
定义一个 空的图片 附上原图的值 把这个图片用于计算
#5
把原图先保存起来,每次转换的时候拿原图来转换