需求
最近有个需求要合成证件照片,证件头像是白底的一寸照片,但是用bitmap合成的时候需要透明的头像照片,就需要将照片的白色背景变成透明色。有两种处理方式,推荐使用第一种.
第一种:bitmap是不可编辑的
不可编辑的bitmap意思是从文件或流中decode的。
Bitmap idPortraitTemp = BitmapFactory.decodeFile(portrait); int portraitWidth = idPortraitTemp.getWidth();int portraitHeight = idPortraitTemp.getHeight();int[] argbs = new int[portraitWidth * portraitHeight];idPortraitTemp.getPixels(argbs, 0, portraitWidth, 0, 0, portraitWidth, portraitHeight);// 获得图片的ARGB值for (int i = 0; i < argbs.length; i++) {int a = Color.alpha(argbs[i]);int r = Color.red(argbs[i]);int g = Color.green(argbs[i]);int b = Color.blue(argbs[i]);if (r > 240 && g > 240 && b > 240) {argbs[i] = 0x00FFFFFF;}}Bitmap idPortrait = Bitmap.createBitmap(argbs, 0, portraitWidth, portraitWidth, portraitHeight, Bitmap.Config.ARGB_4444);
第二种:bitmap是可编辑的
可编辑的意思是自己创建的bitmap,比如Bitmap.createBitmap
private static Bitmap dealBackground(Bitmap bm) {for (int i = 0; i < bm.getWidth(); i++) {for (int j = 0; j < bm.getHeight(); j++) {int color = bm.getPixel(i, j);int R = Color.red(color);int G = Color.green(color);int B = Color.blue(color);if (R > 240 && G > 240 && B > 240) {int newColor = Color.rgb(255, 255, 255);bm.setPixel(i, j, newColor);}}}return bm;}