如何把一张张的图,根据想要的灰度级进行转化,比如我电脑上设置的是32位真彩色,
robot.createScreenCapture(rectangle)创建的一副图象怎么转化各种灰度级, 比如转化成16真彩色,或其他的?转化后图象的字节会不会变小?

解决方案 »

  1.   


      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);   
          }   
      }
      

  2.   

    没怎么写过APPLET,请把调用方式发一下,就是运行的方式