首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 彩色圖片轉灰度:ARGB 位運算詳解

     編輯:程式設計綜合問答

核心程式碼片段

pix[i] = 255 << 24 | gray << 16 | gray << 8 | gray;

位運算拆解

Java int 32 位元表示 ARGB 像素:

位元範圍佔位說明
31-24AAAA AAAAAlpha (透明度),255 = 不透明
23-16RRRR RRRRRed
15-8GGGG GGGGGreen
7-0BBBB BBBBBlue

逐步還原

  1. gray = (r + g + b) / 3 → 灰度值 0~255。
  2. 255 << 24 → 0xFF000000 (Alpha 滿)。
  3. gray << 16 → 灰度值置於 Red 位置。
  4. gray << 8 → 灰度值置於 Green 位置。
  5. gray → 灰度值置於 Blue 位置。
  6. | (按位或) 合併四部分 → 完整 ARGB 像素,R=G=B=gray,呈現灰階。

完整轉灰度方法

public int[] toGray(int[] pix, int w, int h) {
    for (int i = 0; i < w * h; i++) {
        int r = (pix[i] >> 16) & 0xFF;
        int g = (pix[i] >> 8)  & 0xFF;
        int b =  pix[i]        & 0xFF;
        int gray = (r + g + b) / 3; // 或 0.299*r + 0.587*g + 0.114*b
        pix[i] = 0xFF000000 | (gray << 16) | (gray << 8) | gray;
    }
    return pix;
}

進階:加權灰度 (ITU-R BT.601)

int gray = (int)(0.299 * r + 0.587 * g + 0.114 * b);

更符合人眼亮度感知,常用於影像處理標準。

效能提示

  • 使用 BufferedImage.TYPE_BYTE_GRAY 直接建立灰度圖,避免手動像素運算。
  • 大圖處理可考慮多執行緒分塊或 OpenCV (JavaCV) 加速。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved