Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 317|回复: 0

[图像处理学习]java 图片的分离象素

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-30 23:57:03 | 显示全部楼层 |阅读模式
    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相反
    ImagemodImg = JFrame.createImage(
    new MemoryImageSource(w,h,colors,0,w))  
      
       
       
         
       

         
       
      


    注释一下: 电脑的颜色合成效果和光的原理相同。蓝,红,绿相加等于白色,而不是黑色。
    最深的颜色是oxff,黑色是0,单种颜色无法表示白色。


    1. /*
    2. *author by liuke
    3. *email:  soulnew@gmail.com
    4. *blog:  souljava.blog.163.com
    5. **/
    6. import java.awt.image.PixelGrabber;
    7. import java.awt.Image;
    8. import java.awt.image.ImageObserver;
    9. import  javax.swing.ImageIcon;
    10. import java.io.FileWriter;
    11. import javax.swing.JFrame;
    12. import java.awt.image.MemoryImageSource;
    13. import  java.awt.Graphics2D;
    14. import java.io.File;
    15. public class ByPixelGrabber{
    16. FileWriter fw;
    17. double index=0.0;
    18. int[] blues,reds,greens;
    19. int[] temp;
    20. int colorindex=0;
    21. int w,h;
    22. String imagename="img/try.jpg";

    23. public  ByPixelGrabber(){  
    24.   ImageIcon image=new ImageIcon(imagename);
    25.   w=image.getIconWidth();
    26.   h=image.getIconHeight();  
    27.   handlepixels(image.getImage(),0,0,w,h);
    28.   saveImage(createImage(blues),"blues.jpg");
    29.   saveImage(createImage(greens),"greens.jpg");
    30.   saveImage(createImage(reds),"reds.jpg");  
    31. }

    32. public void handlesinglepixel(int x, int y, int pixel) {
    33.   
    34.    
    35.         int alpha = (pixel >> 24) & 0xff;
    36.         int red   = (pixel >> 16) & 0xff;        
    37.         int green = (pixel >>  8) & 0xff;
    38.         int blue  = (pixel      ) & 0xff;
    39.          
    40.         alpha=alpha<<24;
    41.         red=red<<16;
    42.         green=green<<8;
    43.         
    44.         blue=blue|alpha;
    45.         green=green|alpha;
    46.         red=red|alpha;
    47.          
    48.         blues[colorindex]=blue;
    49.         reds[colorindex]=red;
    50.         greens[colorindex]=green;     
    51.         colorindex++;            
    52.     }
    53.    
    54.     public Image createImage(int[] colors){
    55.      JFrame jf=new JFrame();
    56.         Image modImg = jf.createImage(
    57.               new MemoryImageSource(            
    58.              w,h,colors,0,w));
    59.         return modImg;
    60.     }
    61.    
    62.     public void saveImage(Image image,String filename){     
    63.      java.awt.image.BufferedImage bi = new java.awt.image.BufferedImage(w, h, java.awt.image.BufferedImage.TYPE_INT_BGR);
    64.         Graphics2D g2= (Graphics2D)bi.getGraphics();
    65.         g2.drawImage(image,0,0,null);
    66.         
    67.         try{
    68.          javax.imageio.ImageIO.write(bi, "JPEG", new java.io.File(filename));
    69.         }catch(Exception e){
    70.          e.printStackTrace();
    71.         }        
    72.     }
    73.    
    74.     public void handlepixels(Image img, int x, int y, int w, int h) {
    75.         int[] pixels = new int[w * h];
    76.         blues=new int[w * h];
    77.         reds=new int[w * h];
    78.         greens=new int[w * h];
    79.         
    80.         PixelGrabber pg = new PixelGrabber(img, x, y, w, h, pixels, 0, w);
    81.         temp=pixels;
    82.         try {
    83.             pg.grabPixels();
    84.         } catch (InterruptedException e) {
    85.             System.err.println("interrupted waiting for pixels!");
    86.             return;
    87.         }
    88.         if ((pg.getStatus() & ImageObserver.ABORT) != 0) {
    89.             System.err.println("image fetch aborted or errored");
    90.             return;
    91.         }
    92.         for (int j = 0; j < h; j++) {
    93.             for (int i = 0; i < w; i++) {
    94.                 handlesinglepixel(x+i, y+j, pixels[j * w + i]);
    95.             }
    96.         }
    97.     }
    98.    
    99. public static void main(String[] args){
    100.   ByPixelGrabber pg=new ByPixelGrabber();
    101. }
    102. }
    复制代码


      
      
       
       

         
       

         
       
      
    复制代码

    源码下载:http://file.javaxxz.com/2014/10/30/235703281.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-25 21:45 , Processed in 0.595402 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表