如何把一张张的图,根据想要的灰度级进行转化,比如我电脑上设置的是32位真彩色,
robot.createScreenCapture(rectangle)创建的一副图象怎么转化各种灰度级, 比如转化成16真彩色,或其他的?转化后图象的字节会不会变小?
robot.createScreenCapture(rectangle)创建的一副图象怎么转化各种灰度级, 比如转化成16真彩色,或其他的?转化后图象的字节会不会变小?
解决方案 »
- String
- JAVA构造函数的名字为什么跟类名一样?
- 关于静态类
- 关于JComponent.paintComponent()问题
- 急求一个tomcat+eclipse+ms sql server 2000 连接数据代码
- 想知道java中的resultset如何获取总行数
- 很简单的问题,第一个帮我解决的人送10分!
- 还是想问线程同步问题,大伙来提提意见
- 请问Java可否调用MsSQL的存储过程,如何调用?
- netty java.lang.IndexOutOfBoundsException: readerIndex(16) + length(12) exceeds
- VB翻译成JAVA, 各位大虾帮忙看看问题在哪
- 各位老大,外企复式通常都是什么形式?
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);
}
}