C# BMP图象处理问题
程序2个图片框:2个按钮,picbox1显示处理前的图片box2显示处理后的图片.程序实现的功能是黑白处理,直接载入一张1024*768的图片代码如下:usingSyst...
程序2个图片框:2个按钮,picbox1显示处理前的图片box2显示处理后的图片.程序实现的功能是黑白处理,直接载入一张1024*768的图片
代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace lvse
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog lvse = new OpenFileDialog();
lvse.Title = "选择图片";
lvse.InitialDirectory = "";
lvse.Filter = "*.bmp|*.bmp";
lvse.FilterIndex = 1;
if (lvse.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image = Image.FromFile(lvse.FileName);
pictureBox2.Image = Image.FromFile(lvse.FileName);//问题1
}
}
private void button2_Click(object sender, EventArgs e)
{
int i,j;
Color c= new Color();
Bitmap b = new Bitmap(pictureBox1.Image);
Bitmap b1 = new Bitmap(pictureBox2.Image);//错误1
Graphics g1 = pictureBox1.CreateGraphics();
for (i = 0; i < 1024; i++)//错误2
{
for (j = 0; j < 768; j++)//错误2
{
c = b.GetPixel(i, j);//错误3
Color c1 = Color.FromArgb(c.B, c.B, c.B);
b1.SetPixel(i, j, c1);
}
pictureBox2.Refresh();
pictureBox2.Image = b1;
}
}
}
}
1.如果将//问题1的那行代码去掉 在//错误1处 提示"未处理NullReferenceException-----未将对象引用设置到对象的实例"
2.问题1的代码保留,错误3处提示"未处理ArgumentOutOfRangeException---参数必须为正且小于高度。
参数名: y"
3.问题1的代码保留,将//错误2处的1024 768分别改为:picturebox1.width和picturebox2.heith可以运行 但是图象处理不完全 仅处理大概1/8的图象
求高人解惑 急 展开
代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace lvse
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog lvse = new OpenFileDialog();
lvse.Title = "选择图片";
lvse.InitialDirectory = "";
lvse.Filter = "*.bmp|*.bmp";
lvse.FilterIndex = 1;
if (lvse.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image = Image.FromFile(lvse.FileName);
pictureBox2.Image = Image.FromFile(lvse.FileName);//问题1
}
}
private void button2_Click(object sender, EventArgs e)
{
int i,j;
Color c= new Color();
Bitmap b = new Bitmap(pictureBox1.Image);
Bitmap b1 = new Bitmap(pictureBox2.Image);//错误1
Graphics g1 = pictureBox1.CreateGraphics();
for (i = 0; i < 1024; i++)//错误2
{
for (j = 0; j < 768; j++)//错误2
{
c = b.GetPixel(i, j);//错误3
Color c1 = Color.FromArgb(c.B, c.B, c.B);
b1.SetPixel(i, j, c1);
}
pictureBox2.Refresh();
pictureBox2.Image = b1;
}
}
}
}
1.如果将//问题1的那行代码去掉 在//错误1处 提示"未处理NullReferenceException-----未将对象引用设置到对象的实例"
2.问题1的代码保留,错误3处提示"未处理ArgumentOutOfRangeException---参数必须为正且小于高度。
参数名: y"
3.问题1的代码保留,将//错误2处的1024 768分别改为:picturebox1.width和picturebox2.heith可以运行 但是图象处理不完全 仅处理大概1/8的图象
求高人解惑 急 展开
3个回答
展开全部
private void button1_Click(object sender, EventArgs e)
{
using (OpenFileDialog lvse = new OpenFileDialog())
{
lvse.Title = "选择图片";
lvse.InitialDirectory = "";
lvse.Filter = "*.bmp|*.bmp";
lvse.FilterIndex = 1;
if (lvse.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image = Image.FromFile(lvse.FileName);
pictureBox2.Image = pictureBox1.Image.Clone() as Image;
}
}
}
private void button2_Click(object sender, EventArgs e)
{
int imageWidth = pictureBox1.Image.Width;
int imageHeight = pictureBox1.Image.Height;
Bitmap bmp = new Bitmap(pictureBox2.Image);
for (int x = 0; x < imageWidth; x++)
{
for (int y = 0; y < imageHeight; y++)
{
Color pixelColor = bmp.GetPixel(x, y);
bmp.SetPixel(x, y, Color.FromArgb(pixelColor.B, pixelColor.B, pixelColor.B));
}
}
pictureBox2.Image = null;
pictureBox2.Image = bmp;
pictureBox2.Refresh();
}
{
using (OpenFileDialog lvse = new OpenFileDialog())
{
lvse.Title = "选择图片";
lvse.InitialDirectory = "";
lvse.Filter = "*.bmp|*.bmp";
lvse.FilterIndex = 1;
if (lvse.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image = Image.FromFile(lvse.FileName);
pictureBox2.Image = pictureBox1.Image.Clone() as Image;
}
}
}
private void button2_Click(object sender, EventArgs e)
{
int imageWidth = pictureBox1.Image.Width;
int imageHeight = pictureBox1.Image.Height;
Bitmap bmp = new Bitmap(pictureBox2.Image);
for (int x = 0; x < imageWidth; x++)
{
for (int y = 0; y < imageHeight; y++)
{
Color pixelColor = bmp.GetPixel(x, y);
bmp.SetPixel(x, y, Color.FromArgb(pixelColor.B, pixelColor.B, pixelColor.B));
}
}
pictureBox2.Image = null;
pictureBox2.Image = bmp;
pictureBox2.Refresh();
}
展开全部
1、你没有在问题1那里加载图片,就去错误1那里进行处理,当然会空指针异常
2、如果你在问题1里面加载的图片尺寸小于1024*768,那么getpixel就会超出范围,自然就出现那个错误了,建议用图片的实际大小来代替那1024和768
3、麻烦你用picturebox1.height代替picturebox2.heith再试
PS:你要复制图片有必要这么麻烦不?
2、如果你在问题1里面加载的图片尺寸小于1024*768,那么getpixel就会超出范围,自然就出现那个错误了,建议用图片的实际大小来代替那1024和768
3、麻烦你用picturebox1.height代替picturebox2.heith再试
PS:你要复制图片有必要这么麻烦不?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
呵呵。你这个程序还没弄完啊?
你还有多少种变换方法啊?
这个问题和你第一个把分辨率降低一半那个问题一样啊。
for
(int
i
=
0;
i
<
box1.Width
-
1;
i
+=
3)
for
(int
j
=
0;
j
<
box1.Height
-
1;
j
+=
3)
box1.Width
-
1
应该改成
box1.Width-3
box1.Height
-
1
应该改成
box1.Height-3
box1.SetPixel(i
+
k1,
j
+
k2,
c1);
这句外边加上判断
if
(i
+
k1
<
box1.Width
&&
j
+
k2
<
boxe.Height)
{
box1.SetPixel(i
+
k1,
j
+
k2,
c1);
}
-----------
前边两段,这样看不出问题。
你得把代码补全才行啊
你还有多少种变换方法啊?
这个问题和你第一个把分辨率降低一半那个问题一样啊。
for
(int
i
=
0;
i
<
box1.Width
-
1;
i
+=
3)
for
(int
j
=
0;
j
<
box1.Height
-
1;
j
+=
3)
box1.Width
-
1
应该改成
box1.Width-3
box1.Height
-
1
应该改成
box1.Height-3
box1.SetPixel(i
+
k1,
j
+
k2,
c1);
这句外边加上判断
if
(i
+
k1
<
box1.Width
&&
j
+
k2
<
boxe.Height)
{
box1.SetPixel(i
+
k1,
j
+
k2,
c1);
}
-----------
前边两段,这样看不出问题。
你得把代码补全才行啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询