Fresco編輯圖片成黑白色

項目中有個需求,需要把圖片轉成黑白色,之後變回原圖的彩色,由於圖片框架使用的是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);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章