如果您在 Microsoft Windows 環境中工作
位圖文件的格式
位圖文件格式支持
位圖文件分為三個部分
第
標頭包含位圖文件的類型大小信息和版面信息
typedef struct tagBITMAPFILEHEADER {
牋燯INT bfType;
牋燚WORD bfSize;
牋燯INT bfReserved
牋燯INT bfReserved
牋燚WORD bfOffBits;
}BITMAPFILEHEADER;
下面是對這個清單中的代碼元素的說明
bfType
bfSize
bfReserved
bfReserved
bfOffBits
現在您已經明白位圖標頭的用途就是標識位圖文件
第
隨後的標頭稱為信息標頭
下面說明如何指定 Windows
typedef struct tagBITMAPINFOHEADER {
牋牋DWORD biSize;
牋牋LONG biWidth;
牋牋LONG biHeight;
牋牋WORD biPlanes;
牋牋WORD biBitCount;
牋牋DWORD biCompression;
牋牋DWORD biSizeImage;
牋牋LONG biXPelsPerMeter;
牋牋LONG biYPelsPerMeter;
牋牋DWORD biClrUsed;
牋牋DWORD biClrImportant;
} BITMAPINFOHEADER;
以上代碼清單的每個元素說明如下
biSize
biWidth
biHeight
biPlanes
biBitCount
biCompression
biSizeImage
biXPelsPerMeter
biYPelsPerMeter
biClrUsed
biClrImportant
現在已定義了創建圖像所需的全部信息
第
在
*
現在
現在我們已經知道了
import java
import java
import java
public class BMPFile extends Component {
牋//
牋private final static int BITMAPFILEHEADER_SIZE =
牋private final static int BITMAPINFOHEADER_SIZE =
牋//
牋//
牋private byte bitmapFileHeader [] = new byte [
牋private byte bfType [] = {
牋private int bfSize =
牋private int bfReserved
牋private int bfReserved
牋private int bfOffBits = BITMAPFILEHEADER_SIZE + BITMAPINFOHEADER_SIZE;
牋//
牋private byte bitmapInfoHeader [] = new byte [
牋private int biSize = BITMAPINFOHEADER_SIZE;
牋private int biWidth =
牋private int biHeight =
牋private int biPlanes =
牋private int biBitCount =
牋private int biCompression =
牋private int biSizeImage =
牋private int biXPelsPerMeter =
牋private int biYPelsPerMeter =
牋private int biClrUsed =
牋private int biClrImportant =
牋//
牋private int bitmap [];
牋//
牋private FileOutputStream fo;
牋//
牋public BMPFile() {
牋}
牋public void saveBitmap (String parFilename
parWidth
牋牋爐ry {
牋牋牋牋fo = new FileOutputStream (parFilename);
牋牋牋牋save (parImage
牋牋牋牋fo
牋牋爙
牋牋燾atch (Exception saveEx) {
牋牋牋牋saveEx
牋牋爙
牋}
牋/*
牋? saveMethod 是該進程的主方法
牋? 將調用 convertImage 方法以將內存圖像轉換為
牋? 字節數組
牋? 位圖文件標頭
牋? 信息標頭
牋?
牋?/
牋private void save (Image parImage
牋牋爐ry {
牋牋牋牋convertImage (parImage
牋牋牋牋writeBitmapFileHeader ();
牋牋牋牋writeBitmapInfoHeader ();
牋牋牋牋writeBitmap ();
牋牋爙
牋牋燾atch (Exception saveEx) {
牋牋牋牋saveEx
牋牋爙
牋}
牋/*
牋? convertImage 將內存圖像轉換為位圖格式 (BRG)
牋? 它還計算位圖信息標頭所用的某些信息
牋?
牋?/
牋private boolean convertImage (Image parImage
牋牋爄nt pad;
牋牋燽itmap = new int [parWidth * parHeight];
牋牋燩ixelGrabber pg = new PixelGrabber (parImage
牋牋牋牋牋牋牋牋牋牋牋牋牋牋牋牋牋牋牋牋燽itmap
牋牋爐ry {
牋牋牋牋pg
牋牋爙
牋牋燾atch (InterruptedException e) {
牋牋牋牋e
牋牋牋牋return (false);
牋牋爙
牋牋爌ad = (
牋牋燽iSizeImage = ((parWidth * parHeight) *
牋牋燽fSize = biSizeImage + BITMAPFILEHEADER_SIZE +
BITMAPINFOHEADER_SIZE;
牋牋燽iWidth = parWidth;
牋牋燽iHeight = parHeight;
牋牋爎eturn (true);
牋}
牋/*
牋? writeBitmap 將象素捕獲器返回的圖像轉換為
牋? 所需的格式
牋? 反向存儲的!
牋?
牋? 每個掃描行必須補足為
牋?/
牋private void writeBitmap () {
牋牋牋int size;
牋牋牋int value;
牋牋牋int j;
牋牋牋int i;
牋牋牋int rowCount;
牋牋牋int rowIndex;
牋牋牋int lastRowIndex;
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19219.html