一個 32 位 `int` 完美容納 ARGB 四個通道,每通道 8 位(0-255):
位分佈:[A(24-31)] [R(16-23)] [G(8-15)] [B(0-7)] 十六進制:0xAARRGGBB
| 代碼片段 | 操作 | 含義 |
|---|---|---|
| `pixel >> 24 & 0xFF` | 右移 24 位 + 掩碼 | 提取 Alpha 通道(最高 8 位) |
| `rgb & 0xFF000000` | 按位與掩碼 | 保留 Alpha,其餘歸零 |
| `rgb >> 16 & 0xFF` | 右移 16 位 + 掩碼 | 提取 Red 通道 |
| `rgb >> 8 & 0xFF` | 右移 8 位 + 掩碼 | 提取 Green 通道 |
| `rgb & 0xFF` | 按位與掩碼 | 提取 Blue 通道 |
| `gray = (r*77 + g*151 + b*28) >> 8` | 加權求和 + 右移 8 位 | 快速計算灰度(等價除以 256),係數來源 ITU-R BT.601 |
| `a | gray << 16 | gray << 8 | gray` | 位或組合 | 將灰度值複製到 R、G、B 三通道,保留原 Alpha,生成灰度圖像素 |
| `pixel & filterColor.getRGB()` | 按位與 | 以濾鏡顏色為掩碼,實現顏色混合/染色效果 |
// 將像素拆解打印,驗證每步結果
int a = (pixel >> 24) & 0xFF;
int r = (pixel >> 16) & 0xFF;
int g = (pixel >> 8) & 0xFF;
int b = pixel & 0xFF;
System.out.printf("ARGB: %d,%d,%d,%d%n", a, r, g, b);
熟練掌握 ARGB 位佈局與基本位運算,閱讀任何 Java 圖像處理源碼(如 `BufferedImage`、`ColorModel`、開源庫)都將不再設限。