Form1.cs 文件如下:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
// myself
using System.Collections.Specialized;
using System.Text;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
namespace haopai
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
Windows 窗体设计器生成的代码
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void Form1_Load(object sender, System.EventArgs e)
{
// GrayByPixels(); //灰度处理
}
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.Label r;
private System.Windows.Forms.TextBox valueBox;
private System.Windows.Forms.Button getbutton;
private System.Windows.Forms.TrackBar trackBar1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox txtStartX;
private System.Windows.Forms.TextBox txtStartY;
private System.Windows.Forms.TextBox txtEndX;
private System.Windows.Forms.TextBox txtEndY;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Button btn_SavePoint; //灰度值
protected int nHuidu = 0;
public Bitmap bmpobj;
private Cursor inCursor; //鼠标样式
private Cursor MyCursor; //鼠标样式
private Point m_ptStart = new Point(0,0);
private Point m_ptEnd = new Point(0, 0);
private bool m_bMouseDown = false;
//读取图片
private void getbutton_Click(object sender, System.EventArgs e)
{
try
{
bmpobj=null; //初始化为空
string path = Application.ExecutablePath.Substring(0,Application.ExecutablePath.LastIndexOf("\\"))+ "\\aa.jpg";
Image get_Image = Image.FromFile(path);
pictureBox1.Image =get_Image;
GrayByPixels(); //灰度处理
//初始化trackBar1
trackBar1.Value = nHuidu;
}
catch(ArgumentException)
{
MessageBox.Show("There was an error.Check the path to the image file.");
}
}
//滚动条
private void trackBar1_Scroll(object sender, System.EventArgs e)
{
int r,g,b;
//Bitmap memBmp = new Bitmap(pictureBox1.Image);//(pictureBox1.Width,pictureBox1.Height,System.Drawing.Imaging.PixelFormat.Format24bppRgb);
UnCodebase () ;
Bitmap memBmp = bmpobj;
//Image userDrawAreaImage = Bitmap memBmp
int nChang = trackBar1.Value - nHuidu;
for(int x=0; x<pictureBox1.Image.Width; x++)
{
for(int y=0; y<pictureBox1.Image.Height; y++)
{
Color pixelColor = memBmp.GetPixel(x, y);
//byte i = 0x01;
if(( (pixelColor.R + nChang) >=0) && ((pixelColor.R + nChang) <= 250)) r = pixelColor.R + nChang;
else r = pixelColor.R;
if(( (pixelColor.G + nChang) >=0) && ((pixelColor.G + nChang) <= 250)) g = pixelColor.G + nChang;
else g = pixelColor.G;
if(( (pixelColor.B + nChang) >=0) && ((pixelColor.B + nChang) <= 250)) b = pixelColor.B + nChang;
else b = pixelColor.B;
//Color newColor = Color.FromArgb(r,g ,b);
//memBmp.SetPixel(x, y, newColor);
memBmp.SetPixel(x, y, Color.FromArgb(r, g, b));
}
}
//bmpobj = memBmp; //把图片传给全局变量
// GrayByPixels();
//Graphics memGp = Graphics.FromImage(memBmp);
pictureBox1.Image = memBmp;
GrayByPixels(); //灰度处理
valueBox.Text = nHuidu.ToString();
}
//pictureBox1 按下鼠标
private void pictureBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
m_ptStart = new Point(e.X, e.Y);
txtStartX.Text = m_ptStart.X.ToString();
txtStartY.Text = m_ptStart.Y.ToString();
//if (!m_bMouseDown)
//{
//m_ptEnd = new Point(e.X, e.Y);
//txtEndX.Text = m_ptEnd.X.ToString();
//txtEndY.Text = m_ptEnd.Y.ToString();
//}
m_bMouseDown = !m_bMouseDown;
}
//pictureBox1 移动鼠标
private void pictureBox1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
try
{
if (!m_bMouseDown == true) return; //判断是否按下 pictureBox1_MouseDown
m_ptEnd = new Point(e.X, e.Y);
this.pictureBox1.Refresh();
if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
{
//m_ptEnd = new Point(e.X, e.Y);
MyCursor = new Cursor("cross_m.cur");
Cursor.Current = MyCursor;
//Rectangle rec = new Rectangle(Convert.ToInt32(txtStartX),Convert.ToInt32(txtStartY),Convert.ToInt32(txtEndX),Convert.ToInt32(txtEndY));
//pictureBox1.Image.Size
//Bitmap memBmp = bmpobj;
//pictureBox1.Image = System.Drawing.Image.FromFile(selection.SubItems[1].Text);
}
//显示"+"指针
else
{
inCursor = new Cursor("pen_rm.cur");
Cursor.Current = inCursor;
}
}
catch
{
if (inCursor != null)
inCursor.Dispose();
if (MyCursor != null)
MyCursor.Dispose();
}
}
//鼠标离开 pictureBox1
private void pictureBox1_MouseLeave(object sender, System.EventArgs e)
{
if (inCursor != null)
inCursor.Dispose();
if (MyCursor != null)
MyCursor.Dispose();
}
//pictureBox1 释放鼠标
private void pictureBox1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (!m_bMouseDown == true) return;
m_ptEnd = new Point(e.X, e.Y);
txtEndX.Text = m_ptEnd.X.ToString();
txtEndY.Text = m_ptEnd.Y.ToString();
m_bMouseDown = !m_bMouseDown;
//
//Bitmap memBmp = new Bitmap(pictureBox1.Image);
//Graphics myGraphics = Graphics.FromImage(pictureBox1.Image);
//Pen blackPen = new Pen(Color.Black, 3);
//Rectangle rec = new Rectangle(Convert.ToInt32(txtStartX),Convert.ToInt32(txtStartY),Convert.ToInt32(txtEndX),Convert.ToInt32(txtEndY));
//myGraphics.DrawRectangle(blackPen, rec);
//pictureBox1.Image = Image.FromStream(myGraphics);
//myGraphics.Dispose();
}
//pictureBox1 点击图片
private void pictureBox1_Click(object sender, System.EventArgs e)
{
}
//pictureBox1 绘制图片
private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
if (m_ptStart.Equals(m_ptEnd)) return;
//if(pictureBox1.Image == null || CurX == 0) return;
//Pen blackPen = new Pen(Color.Black, 3);
e.Graphics.DrawRectangle(System.Drawing.Pens.Yellow,m_ptStart.X,m_ptStart.Y,m_ptEnd.X - m_ptStart.X, m_ptEnd.Y - m_ptStart.Y);
//this.pictureBox1.Refresh();
}
//保存截取图片点
private void btn_SavePoint_Click(object sender, System.EventArgs e)
{
}
/ xg //
public void UnCodebase () //(Bitmap pic)
{
if(bmpobj == null)
{
//Bitmap memBmp = new Bitmap(pictureBox1.Image);//(pictureBox1.Width,pictureBox1.Height,System.Drawing.Imaging.PixelFormat.Format24bppRgb);
bmpobj = new Bitmap (pictureBox1.Image);//(pic); //转换为Format32bppRgb
}
}
/// <summary>
/// 根据RGB,计算灰度值
/// </summary>
/// <param name="posClr">Color值</param>
/// <returns>灰度值,整型</returns>
private int GetGrayNumColor(System.Drawing.Color posClr)
{
return (posClr.R * 19595 + posClr.G * 38469 + posClr.B * 7472)>> 16;
}
/// <summary>
/// 灰度转换,逐点方式
/// </summary>
public void GrayByPixels() //灰度处理
{
// xg //
int tmpValue = 0;
UnCodebase ();
Bitmap memBmp = bmpobj;
for (int i = 0; i < bmpobj.Height; i++)
{
for (int j = 0; j < bmpobj.Width; j++)
{
//int tmpValue = GetGrayNumColor(bmpobj.GetPixel(j, i));
tmpValue += GetGrayNumColor(bmpobj.GetPixel(j, i));
//bmpobj.SetPixel(j, i, Color.FromArgb(tmpValue, tmpValue, tmpValue));
}
}
tmpValue = tmpValue/(bmpobj.Height * bmpobj.Width);
valueBox.Text = tmpValue.ToString();
nHuidu = tmpValue; //全局灰度
}
/// <summary>
/// 去图形边框
/// </summary>
/// <param name="borderWidth"></param>
public void ClearPicBorder(int borderWidth)
{
for (int i = 0; i < bmpobj.Height; i++)
{
for (int j = 0; j < bmpobj.Width; j++)
{
if (i < borderWidth || j < borderWidth || j > bmpobj.Width - 1 - borderWidth || i > bmpobj.Height - 1 - borderWidth)
bmpobj.SetPixel(j, i, Color.FromArgb(255, 255, 255));
}
}
}
}
}
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
// myself
using System.Collections.Specialized;
using System.Text;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
namespace haopai
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
Windows 窗体设计器生成的代码
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void Form1_Load(object sender, System.EventArgs e)
{
// GrayByPixels(); //灰度处理
}
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.Label r;
private System.Windows.Forms.TextBox valueBox;
private System.Windows.Forms.Button getbutton;
private System.Windows.Forms.TrackBar trackBar1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox txtStartX;
private System.Windows.Forms.TextBox txtStartY;
private System.Windows.Forms.TextBox txtEndX;
private System.Windows.Forms.TextBox txtEndY;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Button btn_SavePoint; //灰度值
protected int nHuidu = 0;
public Bitmap bmpobj;
private Cursor inCursor; //鼠标样式
private Cursor MyCursor; //鼠标样式
private Point m_ptStart = new Point(0,0);
private Point m_ptEnd = new Point(0, 0);
private bool m_bMouseDown = false;
//读取图片
private void getbutton_Click(object sender, System.EventArgs e)
{
try
{
bmpobj=null; //初始化为空
string path = Application.ExecutablePath.Substring(0,Application.ExecutablePath.LastIndexOf("\\"))+ "\\aa.jpg";
Image get_Image = Image.FromFile(path);
pictureBox1.Image =get_Image;
GrayByPixels(); //灰度处理
//初始化trackBar1
trackBar1.Value = nHuidu;
}
catch(ArgumentException)
{
MessageBox.Show("There was an error.Check the path to the image file.");
}
}
//滚动条
private void trackBar1_Scroll(object sender, System.EventArgs e)
{
int r,g,b;
//Bitmap memBmp = new Bitmap(pictureBox1.Image);//(pictureBox1.Width,pictureBox1.Height,System.Drawing.Imaging.PixelFormat.Format24bppRgb);
UnCodebase () ;
Bitmap memBmp = bmpobj;
//Image userDrawAreaImage = Bitmap memBmp
int nChang = trackBar1.Value - nHuidu;
for(int x=0; x<pictureBox1.Image.Width; x++)
{
for(int y=0; y<pictureBox1.Image.Height; y++)
{
Color pixelColor = memBmp.GetPixel(x, y);
//byte i = 0x01;
if(( (pixelColor.R + nChang) >=0) && ((pixelColor.R + nChang) <= 250)) r = pixelColor.R + nChang;
else r = pixelColor.R;
if(( (pixelColor.G + nChang) >=0) && ((pixelColor.G + nChang) <= 250)) g = pixelColor.G + nChang;
else g = pixelColor.G;
if(( (pixelColor.B + nChang) >=0) && ((pixelColor.B + nChang) <= 250)) b = pixelColor.B + nChang;
else b = pixelColor.B;
//Color newColor = Color.FromArgb(r,g ,b);
//memBmp.SetPixel(x, y, newColor);
memBmp.SetPixel(x, y, Color.FromArgb(r, g, b));
}
}
//bmpobj = memBmp; //把图片传给全局变量
// GrayByPixels();
//Graphics memGp = Graphics.FromImage(memBmp);
pictureBox1.Image = memBmp;
GrayByPixels(); //灰度处理
valueBox.Text = nHuidu.ToString();
}
//pictureBox1 按下鼠标
private void pictureBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
m_ptStart = new Point(e.X, e.Y);
txtStartX.Text = m_ptStart.X.ToString();
txtStartY.Text = m_ptStart.Y.ToString();
//if (!m_bMouseDown)
//{
//m_ptEnd = new Point(e.X, e.Y);
//txtEndX.Text = m_ptEnd.X.ToString();
//txtEndY.Text = m_ptEnd.Y.ToString();
//}
m_bMouseDown = !m_bMouseDown;
}
//pictureBox1 移动鼠标
private void pictureBox1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
try
{
if (!m_bMouseDown == true) return; //判断是否按下 pictureBox1_MouseDown
m_ptEnd = new Point(e.X, e.Y);
this.pictureBox1.Refresh();
if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
{
//m_ptEnd = new Point(e.X, e.Y);
MyCursor = new Cursor("cross_m.cur");
Cursor.Current = MyCursor;
//Rectangle rec = new Rectangle(Convert.ToInt32(txtStartX),Convert.ToInt32(txtStartY),Convert.ToInt32(txtEndX),Convert.ToInt32(txtEndY));
//pictureBox1.Image.Size
//Bitmap memBmp = bmpobj;
//pictureBox1.Image = System.Drawing.Image.FromFile(selection.SubItems[1].Text);
}
//显示"+"指针
else
{
inCursor = new Cursor("pen_rm.cur");
Cursor.Current = inCursor;
}
}
catch
{
if (inCursor != null)
inCursor.Dispose();
if (MyCursor != null)
MyCursor.Dispose();
}
}
//鼠标离开 pictureBox1
private void pictureBox1_MouseLeave(object sender, System.EventArgs e)
{
if (inCursor != null)
inCursor.Dispose();
if (MyCursor != null)
MyCursor.Dispose();
}
//pictureBox1 释放鼠标
private void pictureBox1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (!m_bMouseDown == true) return;
m_ptEnd = new Point(e.X, e.Y);
txtEndX.Text = m_ptEnd.X.ToString();
txtEndY.Text = m_ptEnd.Y.ToString();
m_bMouseDown = !m_bMouseDown;
//
//Bitmap memBmp = new Bitmap(pictureBox1.Image);
//Graphics myGraphics = Graphics.FromImage(pictureBox1.Image);
//Pen blackPen = new Pen(Color.Black, 3);
//Rectangle rec = new Rectangle(Convert.ToInt32(txtStartX),Convert.ToInt32(txtStartY),Convert.ToInt32(txtEndX),Convert.ToInt32(txtEndY));
//myGraphics.DrawRectangle(blackPen, rec);
//pictureBox1.Image = Image.FromStream(myGraphics);
//myGraphics.Dispose();
}
//pictureBox1 点击图片
private void pictureBox1_Click(object sender, System.EventArgs e)
{
}
//pictureBox1 绘制图片
private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
if (m_ptStart.Equals(m_ptEnd)) return;
//if(pictureBox1.Image == null || CurX == 0) return;
//Pen blackPen = new Pen(Color.Black, 3);
e.Graphics.DrawRectangle(System.Drawing.Pens.Yellow,m_ptStart.X,m_ptStart.Y,m_ptEnd.X - m_ptStart.X, m_ptEnd.Y - m_ptStart.Y);
//this.pictureBox1.Refresh();
}
//保存截取图片点
private void btn_SavePoint_Click(object sender, System.EventArgs e)
{
}
/ xg //
public void UnCodebase () //(Bitmap pic)
{
if(bmpobj == null)
{
//Bitmap memBmp = new Bitmap(pictureBox1.Image);//(pictureBox1.Width,pictureBox1.Height,System.Drawing.Imaging.PixelFormat.Format24bppRgb);
bmpobj = new Bitmap (pictureBox1.Image);//(pic); //转换为Format32bppRgb
}
}
/// <summary>
/// 根据RGB,计算灰度值
/// </summary>
/// <param name="posClr">Color值</param>
/// <returns>灰度值,整型</returns>
private int GetGrayNumColor(System.Drawing.Color posClr)
{
return (posClr.R * 19595 + posClr.G * 38469 + posClr.B * 7472)>> 16;
}
/// <summary>
/// 灰度转换,逐点方式
/// </summary>
public void GrayByPixels() //灰度处理
{
// xg //
int tmpValue = 0;
UnCodebase ();
Bitmap memBmp = bmpobj;
for (int i = 0; i < bmpobj.Height; i++)
{
for (int j = 0; j < bmpobj.Width; j++)
{
//int tmpValue = GetGrayNumColor(bmpobj.GetPixel(j, i));
tmpValue += GetGrayNumColor(bmpobj.GetPixel(j, i));
//bmpobj.SetPixel(j, i, Color.FromArgb(tmpValue, tmpValue, tmpValue));
}
}
tmpValue = tmpValue/(bmpobj.Height * bmpobj.Width);
valueBox.Text = tmpValue.ToString();
nHuidu = tmpValue; //全局灰度
}
/// <summary>
/// 去图形边框
/// </summary>
/// <param name="borderWidth"></param>
public void ClearPicBorder(int borderWidth)
{
for (int i = 0; i < bmpobj.Height; i++)
{
for (int j = 0; j < bmpobj.Width; j++)
{
if (i < borderWidth || j < borderWidth || j > bmpobj.Width - 1 - borderWidth || i > bmpobj.Height - 1 - borderWidth)
bmpobj.SetPixel(j, i, Color.FromArgb(255, 255, 255));
}
}
}
}
}
本文转自钢钢博客园博客,原文链接:http://www.cnblogs.com/xugang/archive/2007/12/24/1012665.html,如需转载请自行联系原作者