读书频道 > 网站 > 网页设计 > Java数字图像处理:编程技巧与应用实践
2.1.4 一个完整的ImageBuffered读取例子
15-12-07    下载编辑
收藏    我要投稿   
本书分为两大部分,其中第一部为前三章,主要介绍Java Swing编程的基础知识。第二部分是本书的核心内容,系统全面地介绍图像处理的各种方法与常见应用场景编程实现。如果你已经对Java语言和Java Swing有基本的立即去当当网订购

本例将会演示前面所讲到的关于BufferedImage对象的所有知识点,包括像素的读取、Raster对象的创建、ColorModel的使用等。下面的代码演示了通过获取鼠标位置改变图像ColorModel对象索引,从而实现图像像素自动变化的方法。

package com.book.chapter.two;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.DataBuffer;
import java.awt.image.DataBufferByte;
import java.awt.image.IndexColorModel;
import java.awt.image.Raster;
import java.awt.image.SampleModel;
import java.awt.image.SinglePixelPackedSampleModel;
import java.awt.image.WritableRaster;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class BufferedImageDemo extends JPanel
            implements MouseMotionListener {

    private BufferedImage image = null;
    private int width = 350;
    private int height = 350;
   
    public BufferedImageDemo() {
        image = createImage();
        addMouseMotionListener(this);
    }

    @Override
    public void mouseMoved(MouseEvent e) {
        // 创建新的图片,基于新的颜色模型索引
        image = new BufferedImage(createColorModel(e.getX()),
                image.getRaster(), false, null);
        repaint();
    }

    @Override
    public void mouseDragged(MouseEvent e) {
    }
   
    public void paintComponent(Graphics g) {
        Graphics2D g2d = (Graphics2D) g;
        if(image  != null) {
            g2d.drawImage(image, 2, 2,
                    width, height, null);
        }
    }

    private BufferedImage createImage() {
        byte[] pixels = new byte[width * height];
        DataBuffer dataBuffer = new DataBufferByte(pixels,
                         width*height, 0);
        SampleModel sampleModel = new
                 SinglePixelPackedSampleModel(
                    DataBuffer.TYPE_BYTE,
                width, height, new int[] {(byte)0xf});
        WritableRaster raster = Raster.createWritableRaster(
            sampleModel, dataBuffer, null);
        return new BufferedImage(createColorModel(0),
                        raster, false, null);
    }

    private static ColorModel createColorModel(int n) {
        byte[] r = new byte[16];
        byte[] g = new byte[16];
        byte[] b = new byte[16];

        for (int i = 0; i < r.length; i++) {
            r[i] = (byte) n;
            g[i] = (byte) n;
            b[i] = (byte) n;
        }
        return new IndexColorModel(4, 16, r, g, b);
    }

    public static void main(String[] args) {
       
        JFrame ui = new JFrame("BufferedImage Demo");
        ui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ui.getContentPane().setLayout(new BorderLayout());
        ui.getContentPane().add(new BufferedImageDemo(),
                        BorderLayout.CENTER);
        ui.setPreferredSize(new Dimension(380, 380));
        ui.pack();
        ui.setVisible(true);
    }
}

 

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站