编程学C#(2):BMP图像处理
(2014-5-12)编制的BMP图像处理程序,学习VS2010 C# 设计方法。
一、 主要内容:
1. 文件的打开、保存;
2. 图像的拷贝、粘贴、剪切粘贴、放大、缩小;
3. axPictureClip 控件的使用;
4. 图像的灰度化、灰度反转、二值化函数设计。
程序运行示例如下:
二、 程序实现:
1. 文件的打开、保存
private void 打开ToolStripMenuItem_Click(objectsender, EventArgs e)
{
OpenFileDialog ofdlg = new OpenFileDialog();
ofdlg.Filter = "BMP File(*.bmp)|*.bmp";
if(ofdlg.ShowDialog() == DialogResult.OK)
{
Bitmap image = newBitmap(ofdlg.FileName);
pictureBox1.Image = image;
}
}
private void 保存ToolStripMenuItem_Click(objectsender, EventArgs e)
{
stringstr;
Bitmapbox1 = new Bitmap(pictureBox1.Image);
SaveFileDialog sfdlg = new SaveFileDialog();
sfdlg.Filter = "bmp 文件(*.bmp)|*.bmp|ALLFile(*.*)|*.*";
sfdlg.ShowDialog();
str =sfdlg.FileName;
if (str!= "")
box1.Save(str);
}
2. 图像的拷贝、粘贴、剪切粘贴、放大
private void 拷贝ToolStripMenuItem_Click(objectsender, EventArgs e)
{
Clipboard.SetDataObject(pictureBox1.Image);
}
private void 粘贴ToolStripMenuItem_Click(objectsender, EventArgs e)
{
IDataObjectiData = Clipboard.GetDataObject();
if(iData.GetDataPresent(DataFormats.Bitmap))
pictureBox2.Image = (Bitmap)iData.GetData(DataFormats.Bitmap);
}
private void 剪切粘贴ToolStripMenuItem_Click(object sender, EventArgs e)
{
axPictureClip1.Picture = pictureBox1.Image;
axPictureClip1.ClipX = 10;
axPictureClip1.ClipY = 10;
axPictureClip1.ClipHeight = 30;
axPictureClip1.ClipWidth = 60;
pictureBox2.Image = axPictureClip1.Clip;
}
private void 放大ToolStripMenuItem_Click(objectsender, EventArgs e)
{
Bitmapbitmap = new Bitmap(this.pictureBox1.Image);
BitmapMyBitmap = new Bitmap(this.pictureBox1.Image);
Graphics g = pictureBox2.CreateGraphics();
g.Clear(this.pictureBox2.BackColor);
g.DrawImage(bitmap, this.pictureBox2.ClientRectangle, 0, 0,MyBitmap.Width / 2, MyBitmap.Height / 2, GraphicsUnit.Pixel);
}
3. axPictureClip 控件的使用
1)添加ActiveX控件到工具箱。
4. 图像的灰度化、灰度反转、二值化函数设计。
/// 图像灰度化
publicstatic Bitmap ToGray(Bitmap bmp)
{
for (int i= 0; i < bmp.Width; i++)
{
for (intj = 0; j < bmp.Height; j++)
{
//获取该点的像素的RGB的颜色
Colorcolor = bmp.GetPixel(i, j);
//利用公式计算灰度值
intgray = (int)(color.R * 0.3 + color.G * 0.59 + color.B * 0.11);
ColornewColor = Color.FromArgb(gray, gray, gray);
bmp.SetPixel(i, j, newColor);
}
}
returnbmp;
}
/// 图像灰度反转
publicstatic Bitmap GrayReverse(Bitmap bmp)
{
for(int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++)
{
//获取该点的像素的RGB的颜色
Color color = bmp.GetPixel(i, j);
Color newColor = Color.FromArgb(255 - color.R, 255 -color.G, 255 - color.B);
bmp.SetPixel(i, j, newColor);
}
}
returnbmp;
}
/// 图像二值化1:取图片的平均灰度作为阈值,低于该值的全都为0,高于该值的全都为255
publicstatic Bitmap ConvertTo1Bpp1(Bitmap bmp)
{
int average= 0;
for(int i = 0; i < bmp.Width; i++)
{
for(int j = 0; j < bmp.Height; j++)
{
Color color = bmp.GetPixel(i, j);
average += color.B;
}
}
average= (int)average / (bmp.Width * bmp.Height);
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 = 255 - color.B;
ColornewColor = value > average ? Color.FromArgb(0, 0, 0) :Color.FromArgb(255,255, 255);
bmp.SetPixel(i, j, newColor);
}
}
returnbmp;
}
三、 程序下载: