62,635
社区成员




import java.applet.*;
import java.awt.*;
import java.awt.image.*;
public class tt4 extends Applet
{
Image art,Buf; //art装入一图片
int onced=0; //状态变量
boolean is_color=true;
Graphics Bufg; //预读取图片,使用双缓冲技术抑制闪烁
Dimension xy=null; //存储一个对象的尺寸
public void init()
{
art=getImage(getDocumentBase(),"test.jpg"); //装入一图片
//resize(170,245); //重新调整窗口大小
}
public void paint(Graphics g)
{
//如果是第一次装入图片,则直接显示
if(onced==0)
{
g.drawImage(art,0,0,this);
}
//如果正在进行灰度变换,则提示等待
if(onced==1)
{
g.setColor(new Color(255,200,0));
g.drawString("正在准备进行灰度变换",1,30);
}
if(onced==2)
{
g.setColor(new Color(255,0,200));
g.drawString("正在进行灰度变换,请等待...",4,30);
}
if(onced==3)
{
if(is_color)
g.drawImage(Buf,0,0,this);
else
g.drawImage(art,0,0,this);
//is_color=!is_color;
//在黑白和彩色之间变化
}
}
public boolean mouseDown(Event evt,int x,int y)
{//鼠标按下,准备变换
if(onced==0)
{
onced=1;
}
repaint();
return true;
}
public boolean mouseUp(Event evt,int x,int y)
{//鼠标弹起,开始变换
if(onced==1)
{
onced=2;
int wd=art.getWidth(this); //取得图片宽
int ht=art.getHeight(this); //取得图片高
GetPixels(art,0,0,wd,ht); //调用灰度变换方法(自定义的方法)
}
return true;
}
public void GetPixels(Image img,int x,int y,int w,int h)
{
int[] pixels=new int[w*h]; //定义一数组,用来存储图片的象素
int gray;
PixelGrabber pg=new PixelGrabber(img,x,y,w,h,pixels,0,w);
try
{
pg.grabPixels(); //读取像素值
}
catch(InterruptedException e)
{
System.err.println("处理被异常中断!请重试!");
}
for(int j=0;j<h;j++) //扫描列
{
for(int i=0;i<w;i++) //扫描行
{
//由红,绿,蓝值得到灰度值
gray=(int)(((pixels[w*j+i]>>16)&0xff)*0.8);
gray+=(int)(((pixels[w*j+i]>>8)&0xff)*0.1);
gray+=(int)(((pixels[w*j+i])&0xff)*0.1);
pixels[w*j+i]=(255<<24)|(gray<<16)|(gray<<8)|gray;
}
}
Image pic=createImage(new MemoryImageSource(w,h,pixels,0,w)); //由像素值产生图像
Bufg.drawImage(pic,0,0,this); //显示黑白图片
onced=3;
repaint();
}
public void update(Graphics g)
{
if(xy==null)
{
xy=this.size();
Buf=createImage(xy.width,xy.height);
Bufg=Buf.getGraphics();
}
paint(g);
}
}