Java——BufferedImage操作实例
通过鼠标位置改变图像ColorModel对象索引,从而实现图像像素自动变化
BufferedImage 由图像数据的 ColorModel 和 Raster 组成。Raster 的 SampleModel 中 band 的数量和类型必须与 ColorModel 所要求的数量和类型相匹配,以表示其颜色和 alpha 分量。所有 BufferedImage 对象的左上角坐标都为 (0, 0)。因此,用来构造 BufferedImage 的任何 Raster 都必须满足:minX=0 且 minY=0。
此类依靠 Raster 的数据获取方法、数据设置方法,以及 ColorModel 的颜色特征化方法。
package chapter2;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.image.*;
/**
 * Created by LENOVO on 18-1-27.
 */
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 mouseDragged(MouseEvent e) {
}
@Override
    public void mouseMoved(MouseEvent e) {
    //创建新的图片
        image = new BufferedImage(createColorModel(e.getX()),image.getRaster(),false,null);
        repaint();
    }
    public void paintComponent(Graphics g){
        Graphics2D g2d = (Graphics2D) g.create();
        if(image != null){
            g2d.drawImage(image,2,2,width,height,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);
    }
private BufferedImage createImage(){
        byte[] pixels = new byte[width*height];
       /*
       * public DataBufferByte(byte[] dataArray, int size, int offset)
使用指定数组、大小和偏移量构造具有单个存储单元且基于字节的 DataBuffer。dataArray
至少必须有 offset + size 个元素。此 DataBuffer 的访问器只能使用 offset 到 offset + size - 1 个元素。
       * */
        DataBuffer dataBuffer = new DataBufferByte(pixels,width*height,0);
        //SampleModel为抽象类,压缩的样本数据:SinglePixelPackedSampleModel实现类
        //将多个样本打包到一个元素中去
        /*
        * public SinglePixelPackedSampleModel(int dataType,int w, int h,int[] bitMasks)
        * dataType - 存储样本使用的数据类型。
         w - 所描述的图像数据区域的宽度(以像素为单位)。
        h - 所描述的图像数据区域的高度(以像素为单位)。
        bitMasks - 所有 band 的位掩码。
        * */
        SampleModel sampleModel = new SinglePixelPackedSampleModel(DataBuffer.TYPE_BYTE,width,height,new int[]{(byte)0xf});
        //null代表位置为(0,0)
         WritableRaster raster = Raster.createWritableRaster(sampleModel,dataBuffer,null);
        return new BufferedImage(createColorModel(0),raster,false,null);
    }
public static void main(String args[]){
        JFrame jf = new JFrame("BufferedImage Demo");
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.getContentPane().setLayout(new BorderLayout());
        jf.getContentPane().add(new BufferedImageDemo(),BorderLayout.CENTER);
        jf.setPreferredSize(new Dimension(380,380));
        jf.pack();
        jf.setVisible(true);
    }
}
Java——BufferedImage操作实例的更多相关文章
- Java最全文件操作实例汇总
		本文实例汇总了Java文件操作.分享给大家供大家参考,具体如下: 1.创建文件夹 ? 1 2 3 4 5 6 7 8 9 10 11 //import java.io.*; File myFolder ... 
- java比较日期大小及日期与字符串的转换【SimpleDateFormat操作实例】
		java比较日期大小及日期与字符串的转换[SimpleDateFormat操作实例] package com.ywx.test; import java.text.ParseException; im ... 
- java 流操作对文件的分割和合并的实例详解_java - JAVA
		文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 java 流操作对文件的分割和合并的实例详解 学习文件的输入输出流,自己做一个小的示例,对文件进行分割和合并. 下面是代 ... 
- Java文件操作源码大全
		Java文件操作源码大全 1.创建文件夹 52.创建文件 53.删除文件 54.删除文件夹 65.删除一个文件下夹所有的文件夹 76.清空文件夹 87.读取文件 88.写入文件 99.写入随机文件 9 ... 
- java BufferedImage 合成多张图片 - 因为JPEGImageEncoder 不能用
		java BufferedImage 合成多张图片 public void createPicTwo2(int x,int y) { try { //读取第一张图片 ... 
- JAVA上百实例源码以及开源项目
		简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级.中级.高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情.执着,对IT的憧憬. ... 
- 安卓 SQLite数据库操作实例
		前段时间写了个安卓平台下SQLite数据库操作的实例 ,一直没得时间总结 ,今天把它弄出来了. 在Android 运行时环境包含了完整的 SQLite. 首先介绍一下SQLite这个数据库: SQLi ... 
- 在安卓开发中使用SQLite数据库操作实例
		前段时间写了个安卓平台下SQLite数据库操作的实例 ,一直没得时间总结 ,今天把它弄出来了. 在Android 运行时环境包含了完整的 SQLite. 首先介绍一下SQLite这个数据库: SQLi ... 
- JAVA字符串操作  (转)
		JAVA字符串操作 原帖地址:http://blog.163.com/hn_myj@126/blog/static/50555635200861133942947/ 参考:http://blog.cs ... 
随机推荐
- 【CF1243D&CF920E】0-1 MST(bfs,set)
			题意:给定一张n个点的完全图,其中有m条边权为1其余为0,求最小生成树的权值和 n,m<=1e5 思路:答案即为边权为0的边连接的联通块个数-1 用set存图和一个未被选取的点的集合,bfs过程 ... 
- React曾经忽略的知识点(下)
			1.JSX渲染 想让类似 false.true.null 或 undefined 出现在输出中,你必须先把它转换成字符串 : <div> My JavaScript variable is ... 
- vim编辑器快捷键
			光标控制命令 命令 光标移动 h或^h 向左移一个字符 j或^j或^n 向下移一行 k或^p 向上移一行 l或空格 向右移一个字符 G 移到文件的最后一行 nG 移到文件的第n行 w 移到下一个字的开 ... 
- 阿里云OSS文件上传封装
			1.先用composer安装阿里云OSS的PHPSDK 2.配置文件里定义阿里云OSS的秘钥 3.在index控制器里的代码封装 <?php namespace app\index\contro ... 
- leetcode-mid-others-621. Task Scheduler
			mycode 53.01% 这个题在纸上画一画就知道啦,只要出现次数最多的字母能够满足要求,其他更少的字母穿插在其中,间隔就更满足<n啦,当然,最后不要忘记加上尾巴哦,尾巴和出现次数最多的字 ... 
- Flask基础总结
			Flask 基础总结 .Flask优点: 拥有强大的第三方组件小而精非常全面,不足就是更新太快 .Flask中的三剑客: HTTPRespone redierct render_template .F ... 
- 面试题:String类通用构造,拷贝构造,析构,赋值函数实现
			已知 String 类定义如下: class String { public: //通用构造函数 String(const char* str = NULL); //拷贝构造函数 String(con ... 
- Unity UI —Text
			Character Text 文本字体的编辑 Font Style 字体格式可以自行下载也可在windows自带字体中查找 Font Size 字体尺寸 Line Spacing 行距 Rich Te ... 
- Python学习之==>操作Redis
			一.redis简介 1.非关系型数据库 2.数据全部是存在内存里面 3.性能非常好,每秒支持30w次读写 4.可以通过备份数据库,把数据存到磁盘上来实现数据的持久化 二.操作redis 1.strin ... 
- C# 文件打开对话框 图片fitter
			"All Image Files|*.bmp;*.ico;*.gif;*.jpeg;*.jpg;*.png;*.tif;*.tiff|""Windows Bitmap(* ... 
