跳到主要內容

發表文章

目前顯示的是有「Bitmap」標籤的文章

用 ColorMatrix 將 Bitmap 轉成灰階 (Grayscale)

之前  提過 從 RGB 格式計算其灰階明亮度 的方法。 在 Android 中,若想將整張圖片轉成灰階效果其實有更簡便的方式,只要透過 ColorMatrix 類別的 setSaturation 函式將飽和度設為 0 即可。(您也可以試試從 0~1 之間的值,看看不同飽和度的效果) 詳細方法如下: //colorBitmap 為原始 Bitmap,grayBitmap 則用來存放處理過後的灰階 Bitmap Canvas canvas = new Canvas(grayBitmap); Paint paint = new Paint(); ColorMatrix colorMatrix = new ColorMatrix(); colorMatrix.setSaturation(0); ColorMatrixColorFilter colorMatrixFilter = new ColorMatrixColorFilter(colorMatrix); paint.setColorFilter(colorMatrixFilter); canvas.drawBitmap(colorBitmap, 0, 0, paint); 參考資料: http://developer.android.com/reference/android/graphics/ColorMatrix.html

Bitmap copyPixelsFromBuffer 顏色不正確?

最近在做圖像處理的功能時發現一個奇怪的現象,當使用 copyPixelsFromBuffer 直接將 ARGB_8888 順序的 Buffer 丟回給 Bitmap 時,顏色會偏藍。 後來查了一下才發現用 copyPixelsFromBuffer 丟 ARGB_8888 資料時,必須將 R 跟 B 交換,也就是用 ABGR 的順序,顏色才會正確。 將 ARGB 轉 ABGR 的方法: pixel = (R << 0) | (G << 8) | (B << 16) | (A << 24); 或 pixel = (pixel & 0xff00ff00) | ((pixel & 0x00ff0000) >> 16) | ((pixel & 0x000000ff) << 16); 註:若使用 setPixel 或 setPixels 來設定 Bitmap 的話,則不需調換。 參考資料: http://developer.android.com/reference/android/graphics/Bitmap.html#copyPixelsFromBuffer(java.nio.Buffer) http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapPixels.html