2024年4月26日发(作者:)

用Java对彩色图片进行灰度变换

我们在网页设计过程中,有时为了模拟单色VGA 的显示效果或为了进行某种形象的夸张设计,而将

彩色图形画面变为黑白显示,这就需要使用彩色到黑白的灰度变换技术。

灰度变换的算法其实很简单,只要提取每个象素点的红、绿、蓝三原色,然后根据公式:灰度值

= 红色亮度值*30%+绿色亮 度值*59%+蓝色亮度值*11%,计算出一个灰度值,并将其作为 红,绿,

蓝三原色的新值重新写回显存即可。

具体步骤如下:

一,调用Graphics 对象的drawImage() 方法,在applet 中显示出一幅名为 的彩色图象,

drawImage() 的调用形式为: age(name,x,y, width,heigth,this)。

二,定义一个数组存放这幅彩色图像的RGB 值,数组大小就是 图像的象素个数。使用

PixelGrabber()获取每个象素点的RGB值。

三,使用灰度变换公式计算出每个象素点的灰度值,并将其作为新的RGB 值存放回数组中,再

调用createImage()方法构造出新的黑白图象。

四,显示出该黑白图片。为了防止变换过程中的闪烁现象,

程序中还使用了双缓冲技术,即先在虚屏中画好图象,再一

次性的显示出来。

程序中使用鼠标来控制彩色到黑白的变换。

灰度变换的源程序如下所示:

import .*;

import .*;

import .*;

public class Rgb2Gray extends Applet

{

public void init()

{

art=getImage(getDocumentBase(),"");

resize(640, 480);// 装入图片;

Image art,Buf;

int onced=0;

boolean is_color=true;

Graphics Bufg;// 使用双缓冲区技术抑制闪烁;

Dimension xy=null;

}

public void paint(Graphics g)

{

如果是第一次装入图片,则直接显示;

if (onced==0)

{

}

// 如果正在进行灰度变换,则提示等待;

if ((onced==1)||(onced==2))

{

}

如果灰度变换完毕,则显示结果;

if (onced==3)

{

if(is_color)

age(Buf,0,0,this);

age(art,0,0,this);

else

or(new Color(255,200,0));

ring("running!", 1, 30);

age(art,0,0,this);

//

//

}

is_color=!is_color;// 在彩色与黑白之间变化;

}

public boolean mouseDown(Event evt, int x, int y)

{

}

public boolean mouseUp(Event evt, int x, int y)

{

if (onced==1)

{

onced=2;

int wd=th(this); // 取得图片宽;

int ht=ght(this);// 取得图片高;

if (onced==0)

{

}

repaint();// 用鼠标触发事件;

return true;

onced=1;

GetPixels(art,0,0,wd,ht);// 调用灰度变换方法;

}

return true;