項目中有個需求,需要把圖片轉成黑白色,之後變回原圖的彩色,由於圖片框架使用的是facebook的fresco
,查看文檔有個後處理器postprocessor,其實也比較簡單
/**
* 顯示圖片灰度的後處理器
*/
Postprocessor redMeshPostprocessor = new BasePostprocessor() {
@Override
public String getName() {
return "redMeshPostprocessor";
}
@Override
public void process(Bitmap bitmap) {
int width = bitmap.getWidth(); //獲取位圖的寬
int height = bitmap.getHeight(); //獲取位圖的高
int []pixels = new int[width * height]; //通過位圖的大小創建像素點數組
bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
int alpha = 0xFF << 24;
for(int i = 0; i < height; i++) {
for(int j = 0; j < width; j++) {
int grey = pixels[width * i + j];
int red = ((grey & 0x00FF0000 ) >> 16);
int green = ((grey & 0x0000FF00) >> 8);
int blue = (grey & 0x000000FF);
grey = (int)((float) red * 0.3 + (float)green * 0.59 + (float)blue * 0.11);
grey = alpha | (grey << 16) | (grey << 8) | grey;
pixels[width * i + j] = grey;
}
}
bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
}
};
調用方式
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(currentImgUrl)
.setPostprocessor(redMeshPostprocessor)
.build();
PipelineDraweeController controller = (PipelineDraweeController)
Fresco.newDraweeControllerBuilder()
.setImageRequest(request)
.setOldController(guess_img.getController())
// other setters as you need
.build();
guess_img.setController(controller);