Java——BufferedImage操作執行個體

來源:互聯網
上載者:User

標籤:ast   一個   儲存   oschina   xtend   err   tla   edr   red   

通過滑鼠位置改變映像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操作執行個體

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.