Bitmap转黑白&灰度方法

1.转灰度

方法一: 
//copy from web(灰度图)
    public  Bitmap toGrayscale(Bitmap bmpOriginal) {
        int width, height;
        height = bmpOriginal.getHeight();
        width = bmpOriginal.getWidth();    

        Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
        Canvas c = new Canvas(bmpGrayscale);
        Paint paint = new Paint();
        ColorMatrix cm = new ColorMatrix();
        //Set the matrix to affect the saturation of colors. 
        //A value of 0 maps the color to gray-scale.
        cm.setSaturation(0);
        ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
        paint.setColorFilter(f);
        c.drawBitmap(bmpOriginal, 0, 0, paint);
        return bmpGrayscale;
    }
  
方法二:
    //copy from web
    public  Bitmap convertToBlackWhite(Bitmap bmp) {
        int width = bmp.getWidth(); // 获取位图的宽
        int height = bmp.getHeight(); // 获取位图的高
        int[] pixels = new int[width * height]; // 通过位图的大小创建像素点数组

        bmp.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) (red * 0.3 + green * 0.59 + blue * 0.11);
            grey = alpha | (grey << 16) | (grey << 8) | grey;
            pixels[width * i + j] = grey;
          }
        }
        //新建图片
        Bitmap newBmp = Bitmap.createBitmap(width, height, Config.RGB_565);
        //设置图片数据
        newBmp.setPixels(pixels, 0, width, 0, 0, width, height);
          //居中
//        Bitmap resizeBmp = ThumbnailUtils.extractThumbnail(newBmp, 380, 460);
        return newBmp;
      }

 方法三:

 private void bitmap2Gray(String filePath){
    	 
//       File file = new File(SAVEDIR, filename + "_1.jpg");
    	Bitmap bitmapSrc =null;
    	Bitmap grayBitmap = null;
         try {
        	 bitmapSrc = BitmapFactory.decodeFile(filePath);
             grayBitmap = Bitmap.createBitmap(bitmapSrc.getWidth(), bitmapSrc.getHeight(), Config.ARGB_8888);  
             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(bitmapSrc, 0, 0, paint);  
             canvas.save(); 
             OutputStream outStream = null;
             outStream = new FileOutputStream(new File(filePath));
             grayBitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			if (bitmapSrc!=null && !bitmapSrc.isRecycled()){
				bitmapSrc.recycle();
			}
			
			if (grayBitmap!=null && !grayBitmap.isRecycled()){
				grayBitmap.recycle();
			}
			
		}
         
         
    }

2.转黑白:

public Bitmap switchColor(Bitmap switchBitmap){
		int width=switchBitmap.getWidth();
		int height=switchBitmap.getHeight();
		
		// Turn the picture black and white
//		Bitmap newBitmap=Bitmap.createBitmap(width,height,Bitmap.Config.RGB_565);
		Bitmap newBitmap=Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888);
		Canvas canvas=new Canvas(newBitmap);
		canvas.drawBitmap(switchBitmap, new Matrix(), new Paint());
		
		int current_color,red,green,blue,alpha,avg=0;
		for (int i=0;i<width;i++){
			for (int j=0;j<height;j++){ 
				//获得每一个位点的颜色
				current_color=switchBitmap.getPixel(i, j);
				//获得三原色
				red=Color.red(current_color);
				green=Color.green(current_color);
				blue=Color.blue(current_color);
				alpha=Color.alpha(current_color);
				avg=(red+green+blue)/3;// RGB average
				if (avg>=210){  //亮度:avg>=126
					//设置颜色
					newBitmap.setPixel(i, j, Color.argb(alpha, 255, 255, 255));// white
				} else if (avg<210 && avg>=80){  //avg<126 && avg>=115
					newBitmap.setPixel(i, j, Color.argb(alpha, 108,108,108));//grey 
				}else{	
					newBitmap.setPixel(i, j, Color.argb(alpha, 0, 0, 0));// black
				}
			}
		}
		return newBitmap;
	}

最终项目代码:

public Bitmap switchBlackNWhiteColor(Bitmap switchBitmap){
		int width=switchBitmap.getWidth();
		int height=switchBitmap.getHeight();
		
		// Turn the picture black and white
		Bitmap newBitmap=Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888);
		Canvas canvas=new Canvas(newBitmap);
		canvas.drawBitmap(switchBitmap, new Matrix(), new Paint());
		
		int current_color,red,green,blue,alpha,avg=0;
		for (int i=0;i<width;i++){
			for (int j=0;j<height;j++){ 
				//get the color of each bit 
				current_color=switchBitmap.getPixel(i, j);
				//achieve  three-primary color
				red=Color.red(current_color);
				green=Color.green(current_color);
				blue=Color.blue(current_color);
				alpha=Color.alpha(current_color);
				avg=(red+green+blue)/3;// RGB average
				
				
				if (avg>=126){
					newBitmap.setPixel(i, j, Color.argb(alpha, 255, 255, 255));// white
				} else if (avg<126 && avg>=115){
					newBitmap.setPixel(i, j, Color.argb(alpha, 108	,108,108));//grey
				} else{	
					newBitmap.setPixel(i, j, Color.argb(alpha, 0, 0, 0));// black
				}
				
				
			}
		}
		return newBitmap;
	}

猜你喜欢

转载自jameskaron.iteye.com/blog/2185470