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#中,可以使用`Bitmap`对象和`LockBits`方法来访问图像的像素,并用上述公式计算新的灰度值。 2. **提取像素法**:这种方法与内存法相似,但更直接地操作像素。可以遍历图像的每个像素,获取其RGB值,然后使用...
要将彩色图像转换为灰度图像,一种常见的方法是使用加权平均法,也称为“灰度系数法”。该方法基于人眼对不同颜色敏感度的不同,对红、绿、蓝三个通道的亮度进行加权求和,得到一个单一的灰度值。加权系数通常为: ...
本示例源码着重讲解如何利用C#进行RGB彩色图像到黑白灰度图像的转换。 首先,我们需要了解颜色的基本原理。在RGB色彩模式中,每种颜色由红(Red)、绿(Green)和蓝(Blue)三种基本颜色组成,通过不同比例的混合...
总结来说,24位Bitmap转1位Bitmap是一个涉及颜色量化和阈值处理的过程,通常用于简化图像并减少存储需求。通过理解和实现这样的转换,开发者可以在各种应用场景中灵活地处理图像数据,优化性能,或满足特定的显示...
在图像处理领域,彩色图像转换成黑白图像,也被称为图像的灰度化处理。这个过程主要是将彩色图像的每个像素点的RGB(红绿蓝)三原色分量转化为一个单一的灰度值,形成单色图像。在VC++环境下,我们可以使用OpenCV、...
在上面的代码中,`binarize`函数接受一个Bitmap对象和一个阈值,`getGrayValue`函数则计算像素的灰度值。你可以根据具体需求调整阈值,以控制黑白分界线。 最后,将处理后的Bitmap显示到ImageView或者其他视图上: ...
然后,我们创建一个新的Bitmap对象来存储转换后的黑白图片: ```csharp Bitmap grayscaleImage = new Bitmap(originalImage.Width, originalImage.Height); ``` 在C#中,图像处理通常涉及到遍历每个像素并对其进行...
这个"256色转灰度图"的源代码示例提供了具体实现这些步骤的方法,是学习图像处理和VC++编程的好资料。通过阅读和理解代码,你可以了解到如何在C++环境中处理图像数据,以及如何应用色彩转换算法。这不仅有助于提升...
灰度图,又称为单色图像或黑白图像,其每个像素只有一种亮度值,没有颜色信息。在灰度图像中,颜色的深浅代表了亮度,通常通过将RGB(红绿蓝)三原色的强度相加平均来得到灰度值。计算公式一般为:灰度 = 0.299R + 0...
文件"HandleBitmap"可能是实现这些操作的一个工具类或方法,包含处理Bitmap的逻辑,包括灰度化算法和相关优化措施。对于大型项目,你还可以考虑使用多线程或者异步任务来处理图片,避免UI线程阻塞,提供更好的用户...
灰度图像,又称为单色图像或黑白图像,只有一个通道,每个像素只有一个亮度值,介于0(黑色)和255(白色)之间。 在进行彩色图像到灰度图像的转换时,有多种方法,如平均法、亮度法和加权平均法等。其中,加权平均...
这一过程可以通过Bitmap类的LockBits和Marshal.Copy方法实现,以提高效率。 3. **灰度化**: 灰度化是将彩色图像转换为单色(灰度)图像的过程。这通常是通过对每个像素的RGB分量进行加权平均实现的,权重分别为0....
这包括调整图像尺寸、去除噪声、二值化(将图像转化为黑白两色)和灰度化。灰度化是将彩色图像转换为单一灰度级别的图像,简化了后续的分析,减少了计算复杂性。 2. 分割与定位:图像中的文字被分割成单个字符或...
在Android平台上,对图片进行灰度处理是一种常见的图像操作,主要目的是将彩色图像转换为黑白图像,也称为单色图像。这种处理方法在各种应用场景中都有所应用,比如复古风格滤镜、信息可视化或者简化视觉效果等。接...
将彩色图像转换为灰度图像,通常采用的方法是根据人眼对颜色敏感度的不同,按照一定的权重公式计算每个像素的灰度值。最常见的公式是基于亮度的加权平均法: 灰度值 = 0.299 * R + 0.587 * G + 0.114 * B 其中R、G...
而灰度图像是只有黑白或各种深浅不同的灰色组成的图像,其像素值通常表示为0到255之间的整数,其中0代表黑色,255代表白色。 ### 彩色图像转灰度图像的算法 为了将彩色图像转换为灰度图像,通常采用的方法是将每个...
2. **创建新的Bitmap对象**:为了不破坏原始图片,我们需要创建一个新的Bitmap对象来存储灰度化的结果。 3. **创建ColorMatrix对象**:ColorMatrix对象用于存储颜色变换矩阵。通过将饱和度设为0,可以实现灰度化的...
在本文中,我们将深入探讨如何使用C#编程语言批量处理彩色图像并将其转换为黑白(灰度)图像。这个过程通常涉及到图像处理的基本概念,包括颜色模型、位图操作以及利用Visual Studio 2010作为开发环境。由于标题提到...
本篇将详细探讨如何使用C语言将不同色彩深度的BMP(Bitmap)图像转换为灰度图片,包括单色、16色、256色、24位和32位BMP格式。 首先,理解BMP文件格式至关重要。BMP是一种未经压缩的位图格式,包含了图像的宽度、...