delphi实现图象灰度处理的3种方法
灰度处理的方法主要有如下3种:
1、最大值法:使R、G、B的值等于3值中最大的一个,即:
R=G=B=max(R,G,B)
最大值法会使形成高亮度很高的灰度图象
- var
- bitmap:tbitmap;
- i,j:integer;
- a,b,c,crgb,temp:longint;
- res:byte;
- begin
- //最大值灰度处理方法
- bitmap:=tbitmap.Create;
- bitmap.Width:=image1.Width+1;
- bitmap.Height:=image1.Height+1;
- for i:=0 to image1.Width+1 do
- begin
- for j:=0 to image1.Height+1 do
- begin
- crgb:=colortorgb(image1.Canvas.Pixels[i,j]);
- a:=crgb;
- b:=crgb shr 8;
- c:=crgb shr 8;
- //求出3者之间的最大值
- if a>b then
- temp:=a
- else temp:=b;
- if c>temp then
- temp:=c ;
- res:=byte(temp);
- bitmap.Canvas.Pixels[i,j]:=rgb(res,res,res);
- end;
- end;
- image1.Canvas.Draw(0,0,bitmap);
- bitmap.Free;
- end;
2、平均值方法:使R、G、B的值求出平均值,即:
R=G=B=(R+G+B)3
平均值法会形成较柔和的灰度图象。
- var
- bitmap:tbitmap;
- i,j:integer;
- crgb:longint;
- rr,gg,bb:byte;
- res:byte;
- begin
- //图象的平均值处理
- bitmap:=tbitmap.Create;
- bitmap.Width:=image1.Width;
- bitmap.Height:=image1.Height;
- for i:=0 to image1.Width+1 do
- begin
- for j:=0 to image1.Height+1 do
- begin
- crgb:=colortorgb(image1.Canvas.Pixels[i,j]);
- rr:=byte(crgb);
- gg:=byte(crgb shr 8);
- bb:=byte(crgb shr 8);
- res:=(rr+gg+bb)div 3;
- bitmap.Canvas.Pixels[i,j]:=rgb(res,res,res);
- end;
- end;
- image1.Canvas.Draw(0,0,bitmap);
- bitmap.Free;
- end;
3、加权平均值法:根据重要性或其他指标给R、G、B赋予不同的权值,并使R、G、B它们的值加权平均,即:
R=G=B=(WrR+WrG+WbB)3,经实际经验和理论推导证明,采用R=G=B=0.30*R+0.59*G+0.11*B,可以得到最合理的灰度图象
- var
- bitmap:tbitmap;
- i,j:integer;
- rr,gg,bb,res:byte;
- crgb:longint;
- begin
- //加权平均处理方法
- bitmap:=tbitmap.Create;
- bitmap.Width:=image1.Width+1;
- bitmap.Height:=image1.Height+1;
- for i:=0 to image1.Width+1 do
- begin
- for j:=0 to image1.Height+1 do
- begin
- crgb:=colortorgb(image1.Canvas.Pixels[i,j]);
- rr:=byte(crgb);
- gg:=byte(crgb shr 8);
- bb:=byte(crgb shr 8);
- res:=(30*rr+59*gg+11*bb)div 100;
- bitmap.Canvas.Pixels[i,j]:=rgb(res,res,res);
- end;
- end;
- image1.Canvas.Draw(0,0,bitmap);
- bitmap.Free;
- end;
http://blog.csdn.net/aroc_lo/article/details/9256077
delphi实现图象灰度处理的3种方法的更多相关文章
- delphi TreeView 从数据库添加节点的四种方法
方法一:delphi中递归算法构建treeView 过程:通过读取数据库中table1的数据,来构建一颗树.table1有两个字段:ID,preID,即当前结点标志和父结点标志.所以整个树的表示为父母 ...
- Delphi中拖动无边框窗口的5种方法
1.MouseMove事件中加入: // ReleaseCapture;// Perform(WM_SYSCOMMAND, $F017 , 0); 2.MouseDown事件中加入: // POSTM ...
- Android-将RGB彩色图转换为灰度图
package com.example.yanlei.wifi; import android.graphics.Bitmap; import android.graphics.BitmapFacto ...
- 2015.1.25 Delphi打开网址链接的几种方法
Delphi打开网址链接的几种方法1.使用shellapi打开系统中默认的浏览器 首先需在头部引用 shellapi单元即在uses中添加shellapi,这里我们需要知道有 ...
- java实现甘特图的2种方法:SwiftGantt和Jfree (转)
http://blog.sina.com.cn/s/blog_50a7c4a601009817.html 第一种方法使用SwiftGantt实现甘特图(进度图推荐这个) import java.a ...
- UML类图画法及其之间的几种关系(转)
UML类图画法及其之间的几种关系 最近做重构项目,需要画一下类图,发现类图的画法及其之间的几种关系已经淡忘了很多,所以整理总结一下,有问题的地方大家可以一起讨论下. 文章目录如下: 类图画法 类之间的 ...
- Delphi中弹出提示框的四种方法
参考:http://blog.itpub.net/8432156/viewspace-924843/ 更为详细的内容请参见:http://blog.csdn.net/akof1314/article/ ...
- UML类图画法及其之间的几种关系
最近做重构项目,需要画一下类图,发现类图的画法及其之间的几种关系已经淡忘了很多,所以整理总结一下,有问题的地方大家可以一起讨论下. 文章目录如下: 类图画法 类之间的几种关系:泛化(Generaliz ...
- 【转】delphi程序只允许运行一个实例的三种方法:
一. 创建互斥对象 在工程project1.dpr中创建互斥对象 Program project1 Uses Windows,Form, FrmMain in 'FrmMain.pas' ...
随机推荐
- HDU2527:Safe Or Unsafe(哈弗曼树)
Problem Description Javac++ 一天在看计算机的书籍的时候,看到了一个有趣的东西!每一串字符都可以被编码成一些数字来储存信息,但是不同的编码方式得到的储存空间是不一样的!并且当 ...
- ThinkPHP验证码类
//ThinkPHP验证码类使用$config = array( 'fontSize' => 30, // 验证码字体大小 'length' => 3, // 验证码位数 'useNois ...
- HDU Good Numbers (热身赛2)
转载请注明出处:http://blog.csdn.net/a1dark 分析:一道水题.找下规律就OK了.不过要注意特判一下0.因为0也是good number.这个把我坑惨了= =||| #incl ...
- 数论(容斥原理)hdu-4509-The Boss on Mars
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4059 题目大意: 给一个n,求1~n中与n互质的数的4次方的总和. 解题思路: 容斥原理.逆元.公式 ...
- Python 做过哪些有趣的项目
1 icedx 241 天前 via Android ♥ 1 考虑到Windows 下的类Alfred 软件都太傻逼 自己用PyQT 写了一个 2 crazyxin19 ...
- 在SQL 语句批量替换数据库字符串的方法
update table[表名] set Fields[字段名]=replace(Fields[字段名],'被替换原内容','要替换成的内容')update ProgInfo set JoinTime ...
- 3DShader之投影贴图(Projective Texturing)
相信大家都应该玩过CS或者CF吧,游戏里面有个喷图功能,就是按一个T键就能在墙上或者地板上喷出自己预先设定的图案. 而刚好这就是我们这个Shader所需实现的内容.由于没有潜伏者的贴图,我只有从这个图 ...
- Axis2(8):异步调用WebService
在前面几篇文章中都是使用同步方式来调用WebService.也就是说,如果被调用的WebService方法长时间不返回,客户端将一直被阻塞,直到该方法返回为止.使用同步方法来调用WebService虽 ...
- sublime2 c++的一些使用配置
1 下载安装好tdw gcc后,配置好环境变量后,配置sublime2. tools->build system-> new build system... 里面输入: { "c ...
- BZOJ 1305: [CQOI2009]dance跳舞( 最大流 )
云神代码很短...0 ms过的...看了代码 , 大概是贪心... orz 我不会证 数据这么小乱搞就可以了吧... ←_← 这道题网络流还是可以写的... 既然限制了最多只能和 k 个不喜欢的人da ...