注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

千鸟

本blog所有日志均系原创 转载请注明出处

 
 
 

日志

 
 

用java 分离图片象素  

2007-06-13 22:40:22|  分类: J2SE |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

java象素级处理是最近自己在玩的东西,下面这个程序就能获得图片任意一点的象素值。

用java分离象素, 只是java象素级处理的小技巧。颜色分离完毕就可以对单一的色彩进行数学处理。

这个程序主要用到awt的两个类:

1.PixelGrabber : 将图片分解成象素存入int[]数组。alpha,green,red ,blue各占8位(bit)

24-31 位表示 alpha 分量,16-23 位表示红色分量,8-15 位表示绿色分量,0-7 位表示蓝色分量。

可以用这个类打开java图像数字信号处理的大门^_^

2.MemoryImageSource :将int[]数组合成图片.功能和PixelGrabber相反

Image modImg = JFrame.createImage(
              new MemoryImageSource(           
             w,h,colors,0,w))

注释一下: 电脑的颜色合成效果和光的原理相同。蓝,红,绿相加等于白色,而不是黑色。

最深的颜色是oxff,黑色是0,单种颜色无法表示白色。

用java 分离图片象素 - souljava - 千鸟用java 分离图片象素 - souljava - 千鸟用java 分离图片象素 - souljava - 千鸟用java 分离图片象素 - souljava - 千鸟

/*
 *author by liuke
 *email:  soulnew@gmail.com
 *blog:  souljava.blog.163.com
 **/
package com.soulnew.Pixel;
import java.awt.image.PixelGrabber;
import java.awt.Image;
import java.awt.image.ImageObserver;
import  javax.swing.ImageIcon;
import java.io.FileWriter;
import javax.swing.JFrame;
import java.awt.image.MemoryImageSource;
import  java.awt.Graphics2D;
import java.io.File;

public class ByPixelGrabber{
 FileWriter fw;
 double index=0.0;
 int[] blues,reds,greens;
 int[] temp;
 int colorindex=0;
 int w,h;
 String imagename="images/try.gif";
 
 public  ByPixelGrabber(){  
  ImageIcon image=new ImageIcon(imagename);
  w=image.getIconWidth();
  h=image.getIconHeight();  
  handlepixels(image.getImage(),0,0,w,h);
  saveImage(createImage(blues),"blues.jpg");
  saveImage(createImage(greens),"greens.jpg");
  saveImage(createImage(reds),"reds.jpg");  
 }
 
 public void handlesinglepixel(int x, int y, int pixel) {
  
   
        int alpha = (pixel >> 24) & 0xff;
        int red   = (pixel >> 16) & 0xff;       
        int green = (pixel >>  8) & 0xff;
        int blue  = (pixel      ) & 0xff;
        
        alpha=alpha<<24;
        red=red<<16;
        green=green<<8;
       
        blue=blue|alpha;
        green=green|alpha;
        red=red|alpha;
         
        blues[colorindex]=blue;
        reds[colorindex]=red;
        greens[colorindex]=green;    
        colorindex++;           
    }
   

    public Image createImage(int[] colors){
     JFrame jf=new JFrame();
        Image modImg = jf.createImage(
              new MemoryImageSource(           
             w,h,colors,0,w));
        return modImg;
    }
   
    public void saveImage(Image image,String filename){     
     java.awt.image.BufferedImage bi = new java.awt.image.BufferedImage(w, h, java.awt.image.BufferedImage.TYPE_INT_BGR);
        Graphics2D g2= (Graphics2D)bi.getGraphics();
        g2.drawImage(image,0,0,null);
       
        try{
         javax.imageio.ImageIO.write(bi, "JPEG", new java.io.File(filename));
        }catch(Exception e){
         e.printStackTrace();
        }       
    }
   


    public void handlepixels(Image img, int x, int y, int w, int h) {
        int[] pixels = new int[w * h];
        blues=new int[w * h];
        reds=new int[w * h];
        greens=new int[w * h];
       
        PixelGrabber pg = new PixelGrabber(img, x, y, w, h, pixels, 0, w);
        temp=pixels;
        try {
            pg.grabPixels();
        } catch (InterruptedException e) {
            System.err.println("interrupted waiting for pixels!");
            return;
        }
        if ((pg.getStatus() & ImageObserver.ABORT) != 0) {
            System.err.println("image fetch aborted or errored");
            return;
        }
        for (int j = 0; j < h; j++) {
            for (int i = 0; i < w; i++) {
                handlesinglepixel(x+i, y+j, pixels[j * w + i]);
            }
        }
    }
   
 public static void main(String[] args){
  ByPixelGrabber pg=new ByPixelGrabber();
 }
}

  评论这张
 
阅读(1214)| 评论(9)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017