首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 實現 24 位元 BMP 位圖檔案儲存完整指南

     編輯:Java 相關知識

Java 原生支援讀取多種圖片格式,但寫入 BMP 並非強項。本文詳述 24 位元 BMP 檔案結構,並提供完整 BMPFile 類別原始碼,可將 java.awt.Image 物件正確寫入標準 BMP 檔案,適用於需與 Windows 原生應用 (如 Access 報告) 互操作的場景。

BMP 檔案三段式結構

  1. 檔案標頭 (14 位元組):bfType="BM"、檔案總大小、保留欄位、資料偏移量 (固定 54)。
  2. 資訊標頭 (40 位元組):寬高、位元數 (24)、壓縮類型 (BI_RGB=0)、解析度、調色盤資訊等。
  3. 像素資料:BGR 三通道序列,掃描列 4 位元組對齊補零,自下而上 儲存 (第一列為影像最底行)。

核心實現邏輯

  • 使用 PixelGrabber 取得 ARGB 像素陣列。
  • 計算行填補位元組:pad = (4 - (width * 3) % 4) % 4。
  • 轉換像素順序為 BGR,寫入時從陣列末尾向前迭代實現垂直翻轉。
  • 提供 intToWord、intToDWord 將整數以 Little-Endian 寫入位元組陣列。

關鍵代碼片段

private void writeBitmap() {
    int pad = 4 - ((biWidth * 3) % 4);
    if (pad == 4) pad = 0; // 修正邊界條件
    // 從最後一行開始寫入
    for (int j = 0; j < size; j++) {
        int value = bitmap[rowIndex];
        rgb[0] = (byte)(value & 0xFF);       // B
        rgb[1] = (byte)((value >> 8) & 0xFF); // G
        rgb[2] = (byte)((value >> 16) & 0xFF); // R
        fo.write(rgb);
        // 處理換行與填補...
    }
}

此類別填補了 JDK 1.2 之前不支援 BMP 寫入的缺口,即便後續版本支援 JPEG,BMP 仍為 Windows 互操作首選格式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved