`

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;
	}

 

分享到:
评论

相关推荐

    c#实现彩色图像转换为灰度图

    在C#中,可以使用`Bitmap`对象和`LockBits`方法来访问图像的像素,并用上述公式计算新的灰度值。 2. **提取像素法**:这种方法与内存法相似,但更直接地操作像素。可以遍历图像的每个像素,获取其RGB值,然后使用...

    C#119将彩色图片转换为灰度图片 源代码

    要将彩色图像转换为灰度图像,一种常见的方法是使用加权平均法,也称为“灰度系数法”。该方法基于人眼对不同颜色敏感度的不同,对红、绿、蓝三个通道的亮度进行加权求和,得到一个单一的灰度值。加权系数通常为: ...

    C#RGB彩色图像转黑白灰度化图像源码

    本示例源码着重讲解如何利用C#进行RGB彩色图像到黑白灰度图像的转换。 首先,我们需要了解颜色的基本原理。在RGB色彩模式中,每种颜色由红(Red)、绿(Green)和蓝(Blue)三种基本颜色组成,通过不同比例的混合...

    24位bitmap 转1位bitmap 源码

    总结来说,24位Bitmap转1位Bitmap是一个涉及颜色量化和阈值处理的过程,通常用于简化图像并减少存储需求。通过理解和实现这样的转换,开发者可以在各种应用场景中灵活地处理图像数据,优化性能,或满足特定的显示...

    VC++将彩色图像转换成黑白图像源代码

    在图像处理领域,彩色图像转换成黑白图像,也被称为图像的灰度化处理。这个过程主要是将彩色图像的每个像素点的RGB(红绿蓝)三原色分量转化为一个单一的灰度值,形成单色图像。在VC++环境下,我们可以使用OpenCV、...

    android中将图片转化成黑白

    在上面的代码中,`binarize`函数接受一个Bitmap对象和一个阈值,`getGrayValue`函数则计算像素的灰度值。你可以根据具体需求调整阈值,以控制黑白分界线。 最后,将处理后的Bitmap显示到ImageView或者其他视图上: ...

    C# 把彩色图片转换成黑白图片

    然后,我们创建一个新的Bitmap对象来存储转换后的黑白图片: ```csharp Bitmap grayscaleImage = new Bitmap(originalImage.Width, originalImage.Height); ``` 在C#中,图像处理通常涉及到遍历每个像素并对其进行...

    256色转灰度图_Vc_

    这个"256色转灰度图"的源代码示例提供了具体实现这些步骤的方法,是学习图像处理和VC++编程的好资料。通过阅读和理解代码,你可以了解到如何在C++环境中处理图像数据,以及如何应用色彩转换算法。这不仅有助于提升...

    VC实现256色转灰度图

    灰度图,又称为单色图像或黑白图像,其每个像素只有一种亮度值,没有颜色信息。在灰度图像中,颜色的深浅代表了亮度,通常通过将RGB(红绿蓝)三原色的强度相加平均来得到灰度值。计算公式一般为:灰度 = 0.299R + 0...

    android图片的灰度化处理

    文件"HandleBitmap"可能是实现这些操作的一个工具类或方法,包含处理Bitmap的逻辑,包括灰度化算法和相关优化措施。对于大型项目,你还可以考虑使用多线程或者异步任务来处理图片,避免UI线程阻塞,提供更好的用户...

    彩色图像转换为灰度图像源码

    灰度图像,又称为单色图像或黑白图像,只有一个通道,每个像素只有一个亮度值,介于0(黑色)和255(白色)之间。 在进行彩色图像到灰度图像的转换时,有多种方法,如平均法、亮度法和加权平均法等。其中,加权平均...

    C#版图像处理界面,包含二值化、灰度化、旋转、放大等

    这一过程可以通过Bitmap类的LockBits和Marshal.Copy方法实现,以提高效率。 3. **灰度化**: 灰度化是将彩色图像转换为单色(灰度)图像的过程。这通常是通过对每个像素的RGB分量进行加权平均实现的,权重分别为0....

    文字识别用到了Tesseract-ocr,另外一个用到了图片处理函数bitmap包括灰度化

    这包括调整图像尺寸、去除噪声、二值化(将图像转化为黑白两色)和灰度化。灰度化是将彩色图像转换为单一灰度级别的图像,简化了后续的分析,减少了计算复杂性。 2. 分割与定位:图像中的文字被分割成单个字符或...

    android图片灰度处理

    在Android平台上,对图片进行灰度处理是一种常见的图像操作,主要目的是将彩色图像转换为黑白图像,也称为单色图像。这种处理方法在各种应用场景中都有所应用,比如复古风格滤镜、信息可视化或者简化视觉效果等。接...

    彩色图片转换成黑白图片(VB代码).rar

    将彩色图像转换为灰度图像,通常采用的方法是根据人眼对颜色敏感度的不同,按照一定的权重公式计算每个像素的灰度值。最常见的公式是基于亮度的加权平均法: 灰度值 = 0.299 * R + 0.587 * G + 0.114 * B 其中R、G...

    用c#实现的256色转灰度图

    而灰度图像是只有黑白或各种深浅不同的灰色组成的图像,其像素值通常表示为0到255之间的整数,其中0代表黑色,255代表白色。 ### 彩色图像转灰度图像的算法 为了将彩色图像转换为灰度图像,通常采用的方法是将每个...

    android获取灰度图片

    2. **创建新的Bitmap对象**:为了不破坏原始图片,我们需要创建一个新的Bitmap对象来存储灰度化的结果。 3. **创建ColorMatrix对象**:ColorMatrix对象用于存储颜色变换矩阵。通过将饱和度设为0,可以实现灰度化的...

    C#批量 彩色图片转黑白图片的源码 VS2010(可正常解压)

    在本文中,我们将深入探讨如何使用C#编程语言批量处理彩色图像并将其转换为黑白(灰度)图像。这个过程通常涉及到图像处理的基本概念,包括颜色模型、位图操作以及利用Visual Studio 2010作为开发环境。由于标题提到...

    bmp位图转换为灰度图片C语言代码2

    本篇将详细探讨如何使用C语言将不同色彩深度的BMP(Bitmap)图像转换为灰度图片,包括单色、16色、256色、24位和32位BMP格式。 首先,理解BMP文件格式至关重要。BMP是一种未经压缩的位图格式,包含了图像的宽度、...

Global site tag (gtag.js) - Google Analytics