利用 Bitmap.getPixels() 將圖片所有像素一次性讀入整數陣列,每個 int 包含 ARGB 四個通道資訊:
int[] pixels = new int[bitmap.getWidth() * bitmap.getHeight()];
bitmap.getPixels(pixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
for (int i = 0; i < pixels.length; i++) {
int clr = pixels[i];
int red = (clr & 0x00FF0000) >> 16; // 高8位
int green = (clr & 0x0000FF00) >> 8; // 中8位
int blue = clr & 0x000000FF; // 低8位
System.out.println("r=" + red + ", g=" + green + ", b=" + blue);
}
關鍵點:getPixels 第三個參數必須為圖片寬度(stride)。
若只需特定座標像素,直接使用 getPixel(x, y):
Bitmap bitmap = ...; // 獲取 Bitmap 實例
int pixel = bitmap.getPixel(x, y); // 直接返回 ARGB 整數
int red = Color.red(pixel);
int green = Color.green(pixel);
int blue = Color.blue(pixel);
避免載入整張圖片像素陣列,記憶體效率大幅提升。
getPixel(x, y) 按需讀取inMutable 為 true 以支援像素修改recycle() 釋放原生記憶體Bitmap.Config.ARGB_8888 確保色彩精度