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;
发布评论