用 Java 对彩色图片进行灰度变换
我们在网页设计过程中,有时为了模拟单色VGA 的显示效果或为了进行某种形象的夸张设计,而将
彩色图形画面变为黑白显示,这就需要使用彩色到黑白的灰度变换技术。
灰度变换的算法其实很简单,只要提取每个象素点的红、绿、蓝三原色,然后根据公式:灰度
值= 红色亮度值*30%+绿色亮 度值*59%+蓝色亮度值*11%,计算出一个灰度值,并将其作为 红,绿,
蓝三原色的新值重新写回显存即可。
具体步骤如下:
一,调用Graphics 对象的drawImage() 方法,在applet 中显示出一幅名为 TEST.JPG 的彩色图象,
drawImage() 的调用形式为: g.drawImage(name,x,y, width,heigth,this)。
二,定义一个数组存放这幅彩色图像的RGB 值,数组大小就是 图像的象素个数。使用
PixelGrabber()获取每个象素点的RGB值。
三,使用灰度变换公式计算出每个象素点的灰度值,并将其作为新的RGB 值存放回数组中,再
调用createImage()方法构造出新的黑白图象。
四,显示出该黑白图片。为了防止变换过程中的闪烁现象,
程序中还使用了双缓冲技术,即先在虚屏中画好图象,再一
次性的显示出来。
程序中使用鼠标来控制彩色到黑白的变换。
灰度变换的tt4.java源程序如下所示:
import java.applet.*;
import java.awt.*;
import java.awt.image.*;
public class Rgb2Gray extends Applet
{
Image art,Buf;
int onced=0;
boolean is_color=true;
Graphics Bufg;// 使用双缓冲区技术抑制闪烁;
Dimension xy=null;
public void init()
{
art=getImage(getDocumentBase(),"test.jpg");
resize(640, 480);// 装入图片;