private Integer[] ImgId = { R.drawable.pic1, R.drawable.pic2, R.drawable.pic3, R.drawable.pic4 };
Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(), ImgId[index]); // ❌ 編譯錯誤:ImgId[index] 是 Integer,非資源 ID 常數
ImageView 實例。ImageView 取得 Drawable 再轉 Bitmap。
// 1. 取得 ImageView(假設佈局中已有對應 id 的 ImageView)
ImageView imageView = findViewById(ImgId[index]); // ❌ 錯誤:ImgId 是 drawable 資源 ID,非 View ID
// 正確:View ID 與 Drawable ID 分離
private int[] viewIds = { R.id.img1, R.id.img2, R.id.img3, R.id.img4 };
private int[] drawableIds = { R.drawable.pic1, R.drawable.pic2, R.drawable.pic3, R.drawable.pic4 };
ImageView iv = findViewById(viewIds[index]);
iv.setImageResource(drawableIds[index]); // 如需動態設定
// 2. 從 ImageView 取得 Bitmap
Drawable drawable = iv.getDrawable();
Bitmap bitmap = null;
if (drawable instanceof BitmapDrawable) {
bitmap = ((BitmapDrawable) drawable).getBitmap();
} else {
// VectorDrawable 或其他類型需繪製到 Canvas
bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
}
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), drawableIds[index]);
// 可加入 Options 控制 inSampleSize 避免 OOM
| 需求 | 方法 |
|---|---|
| 從資源 ID 直接載入 Bitmap | BitmapFactory.decodeResource(res, drawableId) |
| 從已顯示的 ImageView 取得當前 Bitmap(含縮放、濾鏡) | imageView.getDrawable() → BitmapDrawable.getBitmap() |
| 動態設定 ImageView 圖片 | imageView.setImageResource(drawableId) 或 setImageBitmap(bitmap) |
不要混淆 R.drawable.xxx(資源 ID)與 R.id.xxx(View ID),兩者整數值域完全不同。