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:求颜色分量最大值
平均值方法:
最大值法:
加权平均法
发表评论
-
html 特殊转义字符
2012-01-20 01:39 541html 特殊转义字符 2010年08月11日 HTM ... -
Notepad2 V4.1.24.62 免费版 是一个外观类似系统记事本的文本编辑工具
2012-01-20 01:39 529Notepad2 V4.1.24.62 免费版 是一个外观类似 ... -
简析HTML七种网页加密解密方法
2012-01-20 01:39 878简析HTML七种网页加密解 ... -
IIS服务器排错指南及错误代码大全
2012-01-20 01:39 679IIS服务器排错指南及错误代码大全 2011年06月22日 ... -
游侠在线自由测试版正式发布啦!!!
2012-01-20 01:39 565游侠在线自由测试版正式发布啦!!! 2010年08月26日 ... -
DDS 文件
2012-01-19 09:29 716DDS 文件 2012年01月04日 dds是Direc ... -
美化工具栏摘计
2012-01-19 09:29 646美化工具栏摘计 2011年02月06日 这种感觉就像是。 ... -
2011-5-9
2012-01-19 09:29 2622011-5-9 2011年05月09日 ... -
VB获取图象的象素
2012-01-19 09:28 830VB获取图象的象素 2011 ... -
vc网络编程常用函数2
2012-01-17 02:04 840vc网络编程常用函数2 20 ... -
延时批处理
2012-01-17 02:04 632延时批处理 2012年01月12日 举个例子,我们要延时 ... -
Zigbee入门指导(二)
2012-01-17 02:03 802Zigbee入门指导(二) 2010年08月06日 Zi ... -
socket 相关函数
2012-01-17 02:03 360socket 相关函数 2011年03 ... -
Extjs IE内存问题
2012-01-17 02:03 624Extjs IE内存问题 2011年08月25日 《1. ... -
毕业纪念册
2012-01-15 21:25 454毕业纪念册 2009年06月27日 -
客家风情二(你将再次捧腹大笑)
2012-01-15 21:25 692客家风情二(你将再次捧腹大笑) 2009年11月12日 ... -
心情日记
2012-01-15 21:25 327心情日记 2010年10月09日 前段时间 ... -
日语N1~N2听力通关必备知识汇总及讲解(一)
2012-01-15 21:25 367日语N1~N2听力通关必备知识汇总及讲解(一) 2010年1 ...
相关推荐
C#GDI+小游戏 飞机大战C#GDI+小游戏 飞机大战C#GDI+小游戏 飞机大战C#GDI+小游戏 飞机大战C#GDI+小游戏 飞机大战
通过大量详尽的实例,本书使有经验的程序员可以更深入地理解在.NET Framework类库中定义和整个GDI+API。 本书从介绍GDI+Windows图形程序设计的基本知识开始,其核心是对一些实际问题的指导,包括如何使用Windows ...
GDI+开发的帮助文档,讲得清晰浅显,而且是中文的.如果学习GDI+开发的话,特别是初学者,强烈推荐下载. 对于初学者,还有一个问题就是,如果想要进行GDI+开发, 需要下载一个GDI+的开发包(SDK). 网上搜到的一般只包含一个...
GDI+的说明 GDI+的说明 GDI+的说明 GDI+的说明
GDI+开发包,解压文件,并将其中的Includes和Lib中的文件复制到VS安装目录中VC98目录下的Includes和Lib文件夹中
GDI+入门级网络绘图板,用Socket技术实现程序之间简单的图形传输和交流,自定义二进制保存图形,点,圆,直线,曲线,三角形,矩形等简单的入门级小程序,新手们可参考参考,部分图形传输未实现,GDI+入门时所写,有...
GDI+入门指导书------经典 非常适合于GDI+初学者
GDI+SDK参考 GDI+SDK参考 GDI+SDK参考 GDI+SDK参考 GDI+SDK参考
GDI+是GDI的延生,应用于WinXP及更新版的Windows系统。相较于GDI它功能更加强大。现有的很多介绍GDI+的资料不少,但几乎都是基于.Net的,而介绍用VB6开发GDI+的资料却少之又少,偏偏又不少人需要用VB6来开发GDI+程序...
GDI+中发生一般性错误GDI+中发生一般性错误GDI+中发生一般性错误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+LIB GDI+LIB GDI+LIB GDI+LIB
GDI GDI+从入门到精通,课件PPT,包含一、二、三、四、五讲。
GDI+ SDK与图形编程 GDI+ SDK与图形编程 GDI+ SDK与图形编程