/** * 將bitmap中的某種顏色值替換成新的顏色 * @param bitmap * @param oldColor * @param newColor * @return */ public static Bitmap replaceBitmapColor(Bitmap oldBitmap,int oldColor,int newColor) { //相關說明可參考 http://xys289187120.blog.51cto.com/3361352/657590/ Bitmap mBitmap = oldBitmap.copy(Config.ARGB_8888, true); //循環獲得bitmap所有像素點 int mBitmapWidth = mBitmap.getWidth(); int mBitmapHeight = mBitmap.getHeight(); int mArrayColorLengh = mBitmapWidth * mBitmapHeight; int[] mArrayColor = new int[mArrayColorLengh]; int count = 0; for (int i = 0; i < mBitmapHeight; i++) { for (int j = 0; j < mBitmapWidth; j++) { //獲得Bitmap 圖片中每一個點的color顏色值 //將需要填充的顏色值如果不是 //在這說明一下 如果color 是全透明 或者全黑 返回值為 0 //getPixel()不帶透明通道 getPixel32()才帶透明部分 所以全透明是0x00000000 //而不透明黑色是0xFF000000 如果不計算透明部分就都是0了 int color = mBitmap.getPixel(j, i); //將顏色值存在一個數組中 方便后面修改 if (color == oldColor) { mBitmap.setPixel(j, i, newColor); //將白色替換成透明色 } } } return mBitmap; }
使用方法:
iv_image.setImageBitmap(BitmapUtil.replaceBitmapColor(gifDecoder.getFrame(i), Color.WHITE, Color.TRANSPARENT));