亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

如何將BufferedImage實例保存為BMP文件

2019-11-18 13:08:17
字體:
來源:轉載
供稿:網友

  要將BufferedImage實例保存為BMP文件,就需要知道BMP文件的格式,可以參考我轉載的文章:《BMP文件格式》。
  
  下面是我的將BufferedImage實例保存為24位色BMP文件的實現。
  
  首先是BMP文件相關的兩個頭結構:BMPFileHeader和BMPInfoHeader。
  
  /**//*
  * Created on 2005-6-21
  *
  * TODO To change the template for this generated file go to
  * Window - PReferences - java - Code Style - Code Templates
  */
  package org.lotus.image.codec.bmp;
  
  /**//**
  * <p> Title: BMP文件的頭結構</p>
  *
  * <p> Description: BMP文件的頭結構固定是14個字節,其定義如下:</p>
  * <p>
  * byte[2] bfType;          指定文件類型,必須是0x424D,即字符串“BM”,也就是說所有.bmp文件的頭兩個字節都是“BM“
  * byte[4] bfSize;          指定文件大小,包括這14個字節
  * byte[2] bfReserved1;      保留字
  * byte[2] bfReserved2;      保留字
  * byte[4] bfOffBits;        為從文件頭到實際的位圖數據的偏移字節數
  * </p>
  *
  * <p> Copyright: Copyright (c) 2005</p>
  *
  * <p> Company: 21Lotus</p>
  *
  * @author George Hill
  * @version 1.0
  */
  
  class BMPFileHeader {
  
  // Header data
  private byte[] data = new byte[14];
  
  public byte[] getData() {
  return this.data;
  }
  
  // BMP file size
  private int size;
  
  public int getSize() {
  return this.size;
  }
  
  private int offset;
  
  public int getOffset() {
  return this.offset;
  }
  
  BMPFileHeader(int size, int offset) {
  this.size = size;
  this.offset = offset;
  
  data[0] = 'B';
  data[1] = 'M';
  
  int value = size;
  data[2] = (byte) value;
  value = value >>> 8;
  data[3] = (byte) value;
  value = value >>> 8;
  data[4] = (byte) value;
  value = value >>> 8;
  data[5] = (byte) value;
  
  value = offset;
  data[10] = (byte) value;
  value = value >>> 8;
  data[11] = (byte) value;
  value = value >>> 8;
  data[12] = (byte) value;
  value = value >>> 8;
  data[13] = (byte) value;
  }
  
  }
  
  /**//*
  * Created on 2005-6-21
  *
  * TODO To change the template for this generated file go to
  * Window - Preferences - Java - Code Style - Code Templates
  */
  package org.lotus.image.codec.bmp;
  
  /**//**
  * <p>Title: BMP文件內容的頭結構</p>
  *
  * <p>Description: BMP文件內容的頭結構固定是40個字節,其定義如下:</p>
  * <p>
  * byte[4] biSize;              指定這個結構的長度,為40
  * byte[4] biWidth;              指定圖象的寬度,單位是象素
  * byte[4] biHeight;            指定圖象的高度,單位是象素
  * byte[2] biplanes;            必須是1,不用考慮
  * byte[2] biBitCount;          指定表示顏色時要用到的位數,常用的值為1(黑白二色圖), 4(16色圖), 8(256色), 24(真彩色圖)
  * byte[4] biCompression;        指定位圖是否壓縮
  * byte[4] biSizeImage;          指定實際的位圖數據占用的字節數
  * byte[4] biXPelsPerMeter;      指定目標設備的水平分辨率,單位是每米的象素個數
  * byte[4] biYPelsPerMeter;      指定目標設備的垂直分辨率,單位是每米的象素個數
  * byte[4] biClrUsed;            指定本圖象實際用到的顏色數,假如該值為零,則用到的顏色數為2biBitCount
  * byte[4] biClrImportant;      指定本圖象中重要的顏色數,假如該值為零,則認為所有的顏色都是重要的
  * </p>
  *
  * <p>Copyright: Copyright (c) 2005</p>
  *
  * <p>Company: 21Lotus</p>
  *
  * @author George Hill
  * @version 1.0
  */
  
  class BMPInfoHeader {
  
  private byte[] data = new byte[40];
  
  public byte[] getData() {
  return this.data;
  }
  
  private int width;
  
  public int getWidth() {
  return this.width;
  }
  
  private int height;
  
  public int getHeight() {
  return this.height;
  }
  
  public int bitCount;
  
  public int getBitCount() {
  return this.bitCount;
  }
  
  public BMPInfoHeader(int width, int height, int bitCount) {
  this.width = width;
  this.height = height;
  this.bitCount = bitCount;
  
  data[0] = 40;
  
  int value = width;
  data[4] = (byte) value;
  value = value >>> 8;
  data[5] = (byte) value;
  value = value >>> 8;
  data[6] = (byte) value;
  value = value >>> 8;
  data[7] = (byte) value;
  
  value = height;
  data[8] = (byte) value;
  value = value >>> 8;
  data[9] = (byte) value;
  value = value >>> 8;
  data[10] = (byte) value;
  value = value >>> 8;
  data[11] = (byte) value;
  
  data[12] = 1;
  
  data[14] = (byte) bitCount;
  
  value = width * height * 3;
  if (width % 4 != 0)
  value += (width % 4) * height;
  data[20] = (byte) value;
  value = value >>> 8;
  data[21] = (byte) value;
  value = value >>> 8;
  data[22] = (byte) value;
  value = value >>> 8;
  data[23] = (byte) value;
  }
  
  }
  
  仿照com.sun.image.codec.jpeg.JPEGImageEncoder寫的接口類BMPEncoder。
  
  /**//*
  * Created on 2005-6-21
  *
  * TODO To change the template for this generated file go to
  * Window - Preferences - Java - Code Style - Code Templates
  */
  package org.lotus.image.codec.bmp;
  
  import java.awt.image.*;
  import java.io.IOException;
  
  /**//**
  * <p>Title: </p>
  *
  * <p>Description: </p>
  *
  * <p>Copyright: Copyright (c) 2005</p>
  *
  * <p>Company: 21Lotus</p>
  *
  * @author George Hill
  * @version 1.0
  */
  
  public interface BMPEncoder {
  
  public void encode(BufferedImage bi) throws IOException;
  
  public static final int BIT_COUNT_BLACKWHITE = 1;
  public static final int BIT_COUNT_16COLORS = 4;
  public static final int BIT_COUNT_256COLORS = 8;
  public static final int BIT_COUNT_TRUECOLORS = 24;
  
  }
  
  BMPEncoder接口的實現BMPEncoderImpl。
  
  /**//*
  * Created on 2005-6-21
  *
  * TODO To change the template for this generated file go to
  * Window - Preferences - Java - Code Style - Code Templates
  */
  package org.lotus.image.codec.bmp;
  
  import java.awt.image.*;
  import java.io.*;
  
  /**//**
  * <p>Title: </p>
  *
  * <p>Description: </p>
  *
  * <p>Copyright: Copyright (c) 2005</p>
  *
  * <p>Company: 21Lotus</p>
  *
  * @author George Hill
  * @version 1.0
  */
  
  class BMPEncoderImpl implements BMPEncoder {
  
  private OutputStream out;
  
  public BMPEncoderImpl(OutputStream out) {
  this.out = out;
  }
  
  public void encode(BufferedImage bi) throws IOException {
  int width = bi.getWidth();
  int height = bi.getHeight();
  
  boolean needBlank = (width % 4 != 0);
  
  int size = width * height * 3;
  if (needBlank) {
  size += (width % 4) * height;
  }
  
  BMPFileHeader fileHeader = new BMPFileHeader(size, 54);
  BMPInfoHeader infoHeader = new BMPInfoHeader(width, height, BIT_COUNT_TRUECOLORS);
  
  byte[] rgbs = new byte[3];
  byte[] blank = new byte[width %

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品视频区| 成人精品一区二区三区电影黑人| 啪一啪鲁一鲁2019在线视频| 成人免费观看a| 宅男66日本亚洲欧美视频| 久久精品青青大伊人av| 欧美成人在线网站| 亚洲欧美在线免费观看| 国产精品美女免费视频| 欧美成人午夜影院| 国产精品v日韩精品| 亚洲人成啪啪网站| 68精品国产免费久久久久久婷婷| 日本一区二区在线播放| 热99精品只有里视频精品| 性欧美长视频免费观看不卡| 青青a在线精品免费观看| 国产丝袜一区二区三区免费视频| 欧美日韩亚洲精品一区二区三区| 538国产精品一区二区在线| 91久久精品视频| 国产欧美日韩中文| 欧美日韩美女视频| 少妇激情综合网| 在线视频国产日韩| 亚洲成人教育av| 欧美天天综合色影久久精品| 亚洲图片欧美日产| 日韩欧美在线视频免费观看| 一区二区三区视频在线| 欧美另类在线观看| 国产欧美亚洲精品| 久久久久久久影视| 国产美女主播一区| 亚洲天堂精品在线| 精品香蕉一区二区三区| 日韩在线高清视频| 国产91对白在线播放| 伊人久久男人天堂| 欧美激情2020午夜免费观看| 久久人91精品久久久久久不卡| 欧美一级成年大片在线观看| 久99久在线视频| 亚洲色图日韩av| 国产精品久久久久久久午夜| 欧美成人免费大片| www.亚洲一二| 成人国产精品色哟哟| 浅井舞香一区二区| 欧美性受xxxx白人性爽| 69av视频在线播放| 国产成人激情小视频| 国内精品久久久久久久| 亚洲第一av网站| 日韩欧美亚洲范冰冰与中字| 国产精品欧美一区二区三区奶水| 黄色成人在线播放| 国产97在线|日韩| 亚洲综合色av| 日韩av在线一区| 亚洲全黄一级网站| 日本a级片电影一区二区| 亚洲精品久久久久久久久| 国产精品一香蕉国产线看观看| 国产精品爽爽ⅴa在线观看| 超碰精品一区二区三区乱码| 91影视免费在线观看| 日韩高清中文字幕| 午夜欧美不卡精品aaaaa| 91精品久久久久久久久不口人| 日韩国产激情在线| 欧美在线一级视频| 中文字幕免费精品一区高清| 久久精品亚洲94久久精品| 亚洲精品成人久久| 国产剧情久久久久久| 97精品国产97久久久久久春色| 国产精品扒开腿做爽爽爽男男| 亚洲自拍偷拍区| 日韩av高清不卡| 一本色道久久88综合亚洲精品ⅰ| 丝袜情趣国产精品| 成人午夜黄色影院| 国产精品观看在线亚洲人成网| 中文一区二区视频| 国产精品人成电影在线观看| 欧美亚洲视频在线看网址| 69久久夜色精品国产69| 日韩精品一二三四区| 一本色道久久综合狠狠躁篇的优点| 日本精品视频在线播放| 91免费欧美精品| 久久99国产精品久久久久久久久| 一区二区在线免费视频| 欧美成人精品影院| 色在人av网站天堂精品| 日韩在线免费观看视频| 欧美激情极品视频| 亚洲国产欧美一区二区三区久久| 久久99久国产精品黄毛片入口| 欧美在线视频网| 亚洲精品在线不卡| 久久久久99精品久久久久| 国产美女精品视频| 成人97在线观看视频| 91成人福利在线| 国产精品劲爆视频| 久久视频国产精品免费视频在线| 国产亚洲成av人片在线观看桃| 久久影视电视剧凤归四时歌| 成人久久一区二区三区| 欧美劲爆第一页| 亚洲网站在线观看| 国产日韩精品在线| 欧美日韩国产一区中文午夜| 亚洲第一国产精品| 欧美精品电影在线| 成人美女av在线直播| 狠狠色狠狠色综合日日五| 2019中文字幕在线免费观看| 黄色成人av网| 色久欧美在线视频观看| 欧美夫妻性视频| 中文字幕在线看视频国产欧美| 自拍偷拍亚洲欧美| 伊人精品在线观看| 精品在线观看国产| 精品人伦一区二区三区蜜桃网站| 成人激情视频在线| 高清日韩电视剧大全免费播放在线观看| 亚洲国产精品成人一区二区| 日韩欧美成人精品| 91在线免费观看网站| 久久五月天色综合| 中文字幕日韩欧美精品在线观看| 欧美日韩国产色视频| 亚洲欧美中文另类| 欧美性xxxx极品hd欧美风情| 韩国精品久久久999| 日韩av理论片| 亚洲第一国产精品| 国产69精品久久久| 91久久精品一区| 国产999精品久久久影片官网| 亚洲国产91精品在线观看| 中文字幕亚洲欧美一区二区三区| 久久九九国产精品怡红院| 精品久久久久久久久久| 日韩成人av一区| 国产精品18久久久久久麻辣| 欧美日韩国产综合新一区| 伊人青青综合网站| 亚洲精品欧美日韩| 成人欧美在线视频| 久久精品亚洲一区| 国产suv精品一区二区| 97香蕉久久夜色精品国产| 国产日韩欧美在线播放| 欧美色视频日本高清在线观看| 欧美成人免费va影院高清| 亚洲精品国产精品乱码不99按摩| 97超视频免费观看| 国产精品一二三在线| 国产福利视频一区二区|