`
bmabma
  • 浏览: 27290 次
  • 性别: Icon_minigender_1
  • 来自: 济南
最近访客 更多访客>>
社区版块
存档分类
最新评论

GDI+入门(十三、GDI+实例――灰度效果)

 
阅读更多

GDI+入门(十三、GDI+实例――灰度效果)
2011年11月19日
  十三、GDI+实例――灰度效果
  图片灰度化处理的方法主要有三种:
  最大化法。这种方法的原理是使RGB的值等于值,即:
  R=G=B=max(R,G,B)
  使用最大化法处理后的灰度图像的亮度很高。
  平均值法。这种方法的原理是使RGB的恒等于三个色彩分量的平均值,即
  R=G=B= (R+G+B)/3
  使用平均值法处理后的灰度图像亮度较为柔和。
  加权平均值法。  “加权”是统计学中常用的名词,这种方法是根据重要性或其他
  指标给R、G、D赋于不同的权值,并位R、G、B等于它们的加权平均值。即:
  R=G=B=(rR+gG+bB))/3,r、g、b分别是R、G、B的权值*权数r、g、b取不同的值时,加权平均值法能够形成不同灰度的灰度图像。由于人眼对绿色的敏感度最高,红色次之,对蓝色的敏感度最低,因此,当权值矿的时,所生成的灰度图像更符合人眼的视觉感受。通常,当r=30%,g=59%,b=11%时,这种图像的灰度较为合理。
  private static Bitmap bitmap;
  private int width;
  private int height;
  public Form1()
  {
  InitializeComponent();
  bitmap = new Bitmap(Application.StartupPath + "//1.jpg");
  width = bitmap.Width - 1;
  height = bitmap.Height - 1;
  }
  Bitmap bmp2;
  Bitmap bmp3;
  Bitmap bmp4;
  private void button1_Click(object sender, EventArgs e)
  {
  Graphics panel2G = panel2.CreateGraphics();
  bmp2 = new Bitmap(width, height);
  Color color;
  for (int i = 0; i bmp2, panel2.ClientRectangle);
  panel2G.ResetTransform();
  panel2G.TranslateTransform(width, 0);
  // bmp2.Dispose();
  panel2G.Dispose();
  }
  private void panel1_Paint(object sender, PaintEventArgs e)
  {
  Graphics panel1G = panel1.CreateGraphics();
  panel1G.DrawImage(bitmap, panel1.ClientRectangle);
  panel1G.Dispose();
  }
  private void ReDrawImage(Bitmap bmp0)
  {
  Color color;
  for (int i = width - 1; i >= 0; i--)
  {
  for (int j = height - 1; j >= 0; j--)
  {
  color = bmp0.GetPixel(i, j);
  int r = color.R;
  int g = color.G;
  int b = color.B;
  //还原红色
  if (r = 192)
  r = 255;
  if (r = 128)
  r = 4 * r - 510;
  //还原绿色
  bool yes;
  yes = false;
  if (g = 128 && (!yes))
  {
  g = 255;
  yes = true;
  }
  if (g >= 192 && (!yes))
  {
  g = 1022 - 4 * g;
  yes = true;
  }
  if (g = 67 && (!yes))
  {
  g = 4 * g - 257;
  }
  //还原蓝色分量
  if (b = 128)
  b = 0;
  if (b >= 67 && b bmp0, panel3.ClientRectangle);
  bmp0.Dispose();
  panel3G.Dispose();
  }
  ///
  /// 最大值
  ///
  ///
  ///
  private void button3_Click(object sender, EventArgs e)
  {
  Graphics panel2G = panel2.CreateGraphics();           
  bmp3 = new Bitmap(width, height);
  Color color;
  for (int i = 0; i bmp3, panel2.ClientRectangle);
  //   bmp3.Dispose();
  panel2G.Dispose();
  }
  ///
  /// 加权平均
  ///
  ///
  ///
  private void button4_Click(object sender, EventArgs e)
  {
  double r = 0.30;
  double g = 0.59;
  double b = 0.11;
  bmp4 = new Bitmap(width, height);
  Graphics panel2G = panel2.CreateGraphics();
  Color color;
  for (int i = 0; i bmp4, panel2.ClientRectangle);
  // bmp4.Dispose();
  panel2G.Dispose();
  }
  private int maxColor(int r, int g, int b)
  {
  if (r > g)
  {
  if (r > b)
  {
  return r;
  }
  else
  {
  return b;
  }
  }
  else
  {
  if (g > b)
  {
  return g;
  }
  else
  {
  return b;
  }
  }
  }
  private void button2_Click(object sender, EventArgs e)
  {
  if (bmp3 == null)
  {
  MessageBox.Show("请先点击变灰按钮");
  return;
  }
  ReDrawImage(bmp3.Clone(new Rectangle(0,0,width,height),PixelFormat.DontCare));
  }
  private void button2_Click_1(object sender, EventArgs e)
  {
  if (bmp2 == null)
  {
  MessageBox.Show("请先点击变灰按钮");
  return;
  }
  ReDrawImage(bmp2.Clone(new Rectangle(0,0,width,height),PixelFormat.DontCare));
  }
  private void button6_Click(object sender, EventArgs e)
  {
  if (bmp4 == null)
  {
  MessageBox.Show("请先点击变灰按钮");
  return;
  }
  ReDrawImage(bmp4.Clone(new Rectangle(0,0,width,height),PixelFormat.DontCare));
  }
  button1_Click:平均值法
  panel1_Paint:加载原图
  ReDrawImage:灰色图像还原彩色图像
  button3_Click:最大值法制作灰度图像
  button4_Click:加权平均法制作灰度图像
  maxColor:求颜色分量最大值
  平均值方法:
  最大值法:
  加权平均法
分享到:
评论

相关推荐

    VB6 GDI+入门教程(最新版)

    GDI+是GDI的延生,应用于WinXP及更新版的Windows系统。相较于GDI它功能更加强大。现有的很多介绍GDI+的资料不少,但几乎都是基于.Net的,而介绍用VB6开发GDI+的资料却少之又少,偏偏又不少人需要用VB6来开发GDI+程序...

    GDI+游戏GDI+游戏GDI+游戏GDI+游戏GDI+游戏GDI+游戏

    C#GDI+小游戏 飞机大战C#GDI+小游戏 飞机大战C#GDI+小游戏 飞机大战C#GDI+小游戏 飞机大战C#GDI+小游戏 飞机大战

    GDI+图像程序设计(PDF & 源码 -电子工业出版社)

    通过大量详尽的实例,本书使有经验的程序员可以更深入地理解在.NET Framework类库中定义和整个GDI+API。  本书从介绍GDI+Windows图形程序设计的基本知识开始,其核心是对一些实际问题的指导,包括如何使用Windows ...

    gdi+ 帮助文档

    GDI+开发的帮助文档,讲得清晰浅显,而且是中文的.如果学习GDI+开发的话,特别是初学者,强烈推荐下载. 对于初学者,还有一个问题就是,如果想要进行GDI+开发, 需要下载一个GDI+的开发包(SDK). 网上搜到的一般只包含一个...

    GDI+的说明 GDI+的说明 GDI+的说明 GDI+的说明

    GDI+的说明 GDI+的说明 GDI+的说明 GDI+的说明

    GDI+开发包 GDI+ SDK

    GDI+开发包,解压文件,并将其中的Includes和Lib中的文件复制到VS安装目录中VC98目录下的Includes和Lib文件夹中

    GDI+入门级网络绘图板

    GDI+入门级网络绘图板,用Socket技术实现程序之间简单的图形传输和交流,自定义二进制保存图形,点,圆,直线,曲线,三角形,矩形等简单的入门级小程序,新手们可参考参考,部分图形传输未实现,GDI+入门时所写,有...

    GDI+入门指导书------经典

    GDI+入门指导书------经典 非常适合于GDI+初学者

    GDI+SDK参考 GDI+SDK参考

    GDI+SDK参考 GDI+SDK参考 GDI+SDK参考 GDI+SDK参考 GDI+SDK参考

    VB6 编写的GDI+程序例子

    通过Visual Basic 6.0 应用GDI+绘制图形,显示图片的例子,采用静态链接库实现,简单方便。 附上教程:http://download.csdn.net/detail/veron_04/4039695

    GDI+中发生一般性错误

    GDI+中发生一般性错误GDI+中发生一般性错误GDI+中发生一般性错误GDI+中发生一般性错误

    C#GDI+图形程序设计源码

    第1章 GDI+ ——下一代图形接口 1.1 理解GDI+ 1.2 探索GDI+ 的功能 1.3 从GDI的角度学习GDI+ 1.4 .NET中的GDI+ 名称空间和类 总结 第2章 第一个GDI+ 应用程序 2.1 绘制表面 2.2 坐标系统 2.3 指南——第一...

    GDI+ 实例 GDI+程序设计实例源代码(非UNICODE,VC++版)

    GDI+的例子 GDI+程序设计实例源代码(非UNICODE,VC++版)

    GDI+ LIB ,GDI+ LIB

    GDI+LIB GDI+LIB GDI+LIB GDI+LIB

    GDI+画三角形

    GDI+画三角形,测试环境vs2013、window7平台,仅供参考

    GDI+ 实现3D图形

    纯 GDI+ 实现3D照相机视角变换 材质贴图等等,绝对物有所值

Global site tag (gtag.js) - Google Analytics