`
handspeaker
  • 浏览: 66204 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android 将ARGB图片转换为灰度图

阅读更多

思路如下:

     1.读取or照相,得到一张ARGB图片。

     2.转化为bitmap类,并对其数据做如下操作:

        A通道保持不变,然后逐像素计算:X = 0.3×R+0.59×G+0.11×B,并使这个像素的值新R,G,B值为X,即:

        new_R = X, new_G = X, new_B = X

        例如:原来一个像素是4个byte,分别为ARGB,现在这个像素应该为AXXX。

      3.将上一步骤得到的bitmap图像写到输出流里面,并保存为图片。或者直接显示在ImageView上。

 

代码片段如下(注意,直接复制到工程里可能会有错误):

		Bitmap bitmapOrg = BitmapFactory.decodeByteArray(rawData, 0, rawData.length);
        //Bitmap bitmapOrg = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher);
		Bitmap bitmapNew = bitmapOrg.copy(Config.ARGB_8888, true); 
		//Bitmap bitmapNew = bitmapOrg.copy(Config.ARGB_8888, true);
		if(bitmapNew == null)
			Log.i("TAG", "null");
		Log.i("TAG", "copy end");
        for(int i = 0;i<bitmapNew.getWidth();i++)
        {
      	  for(int j =0;j<bitmapNew.getHeight();j++)
      	  {	
                int col = bitmapNew.getPixel(i, j);
                int alpha = col&0xFF000000;
                int red = (col&0x00FF0000)>>16;
                int green = (col&0x0000FF00)>>8;
                int blue = (col&0x000000FF);
                int gray = (int)((float)red*0.3+(float)green*0.59+(float)blue*0.11);
                int newColor = alpha|(gray<<16)|(gray<<8)|gray;
                bitmapNew.setPixel(i, j, newColor);
                //Log.v("tag",  Integer.toHexString(col));  
      	  }
        }
        Log.i("TAG", "pro end");
        sendMsg(bitmapNew);
        File file = new File(Environment.getExternalStorageDirectory()+File.separator+"gray"+number+".jpg");
        OutputStream out;
		try {
			out = new FileOutputStream(file);
			if(bitmapNew.compress(Bitmap.CompressFormat.JPEG, 100, out))
				Log.i("TAG", "success");
			out.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}

 注意,这种直接对bitmap图像的逐像素处理非常费时,所以最好开辟一个新的线程来做这类操作。

另外,有一个Bitmap.config里面有一个alpha8设置,经过实践证明,这个设置不好使,在保存时选择这个设置,无论是保存图片还是现实图片,都会失败。

想直接保存成单通道的灰度图也不行,android不支持,所以即使是灰度图,实际上也是4通道的ARGB图。

分享到:
评论

相关推荐

    Android-如何将RGB彩色图转换为灰度图方法介绍

    总之,将RGB彩色图转换为灰度图是Android图像处理中的常见操作,通过简单的数学计算和位操作,我们可以轻松实现这个功能。在Android应用中,结合UI交互,用户可以实时预览转换效果,提供更好的用户体验。

    android图片的灰度化处理

    在Android平台上,图片的灰度化处理是一种常见的图像处理技术,它将彩色图像转换为单色调的灰度图像。这个过程涉及到色彩空间的转换,主要从RGB(红绿蓝)色彩模型转换到灰度色彩模型。灰度图像的每个像素只有一个...

    Android OpenCV 图片灰度处理

    图片的灰度处理是图像处理中的基本操作,它将彩色图像转换为单色图像。在OpenCV中,我们可以使用`cvtColor`函数来实现这一转换。假设我们已经有了一个Bitmap对象`bitmap`,我们可以这样做: ```java Mat src = new ...

    Android Drawable、Bitmap、byte、灰度 转换

    在Android开发中,图片资源的处理是常见的...通过以上方法,开发者可以灵活地在Android应用中处理各种图像资源,实现不同场景下的需求,如图片缩放、格式转换、灰度化等。这对于提升应用的性能和用户体验具有重要意义。

    android4.0客户端实现图片的灰度化

    灰度化,即把彩色图像转换成单色的灰度图像,每个像素由红、绿、蓝(RGB)三原色组成,灰度化的过程就是将这三原色的强度进行加权平均,得到一个新的颜色值,这个新的颜色值就是该像素的灰度值。在标准的RGB色彩空间...

    在android上利用opencv进行图像灰度化

    图像灰度化是将彩色图像转换为单色(灰阶)图像的过程,通常用于简化图像分析或减少数据量。 首先,让我们详细了解一下OpenCV在Android上的集成过程。在Android项目中,你需要将OpenCV库导入到工程中。这通常通过...

    Android Drawable、Bitmap、byte、灰度 之间的转换

    在Android开发中,图片资源的处理是常见的需求之一,尤其涉及到不同格式间的转换,如Drawable、Bitmap、byte数组以及灰度图像的转换。这些转换在实际应用中具有重要意义,不仅能够优化内存使用,还能实现图像的高效...

    android Tif Tiff格式的图片转换成bitmap 读取TIFF传真格式图片DEMO下载

    总之,"android Tif Tiff格式的图片转换成bitmap 读取TIFF传真格式图片DEMO下载"这个资源提供了一个实用的方法,帮助开发者在Android应用中处理TIF/TIFF格式的图像,通过SeeTiff库实现图片的读取和转换,让Android...

    Android中图片处理(放大缩小,去色,转换格式,增加水印等

    图片去色是将彩色图片转换为灰度图片的过程。在Android中,这可以通过调整颜色矩阵实现。在`toGrayscale()`方法中,创建一个`ColorMatrix`对象并设置饱和度为0,这会使得图像失去所有颜色信息。然后,通过`...

    android 显示yuv图片

    3. **颜色转换**:由于Android默认使用RGB格式进行显示,所以需要将YUV数据转换为RGB。可以使用`Android硬件加速器`(如`renderscript`或`OpenGL ES`)或者手动实现转换算法。 4. **创建Bitmap**:将转换后的RGB数据...

    android 位图转单色位图

    总之,将Android的彩色位图转换为单色位图涉及到位图的加载、配置创建、像素转换以及保存或显示。这个过程需要对Android图形系统有深入的理解,并可能需要用到原生代码来实现1位深度的支持。通过这样的转换,开发者...

    android图片特效处理

    本文将深入探讨如何在Android中实现图片的灰度处理和复古风格处理,以及其他可能的图片特效。 首先,让我们来理解灰度处理。灰度图像是一种没有颜色信息的图像,每个像素仅由一个亮度值表示,这个值在0(黑色)到...

    Android拍照+图片处理(修正版)

    4. **黑白效果**:转换图片为黑白可以通过调整像素的ARGB值来实现。遍历每个像素,将颜色通道值转换为灰度值,然后更新像素。也可以使用第三方库,如`Picaso`或`Glide`,它们提供了便捷的滤镜功能。 在实际开发中,...

    Android图片滤镜

    - **灰度滤镜**:将图像转换为黑白,通过改变不同颜色的灰度值来保持图像的对比度。 4. **OpenGL ES**: 对于复杂的滤镜效果,如实时预览和性能要求高的场景,可以利用OpenGL ES进行图像处理。OpenGL ES提供了一...

    android-image-filter-ndk,使用android ndk在c中处理位图的android示例项目.zip

    1. 基本滤镜:例如灰度滤镜,只需将每个像素的RGB值转换为其平均值;模糊滤镜,通过邻域像素的加权平均实现。 2. 高级滤镜:如边缘检测(Sobel、Canny等)、色彩空间转换(HSV、YUV等)、光照效果、滤波器库...

    Android图像处理技术(实现Android中的PS)(六)

    例如,我们可以将RGB图像转换为灰度图像,以达到黑白效果。 滤镜效果是Android图像处理的常见应用场景。通过Shader类,开发者可以实现各种滤镜,如模糊、锐化、色彩增强等。Shader有多种类型,如LinearGradient、...

    Android源码——常用图片特效处理源码.zip

    例如,灰度特效可以通过计算像素的平均亮度将其转换为灰色。源码可能包含对Bitmap对象的像素数据进行遍历和修改的代码。 2. **模糊特效**:模糊效果可以通过高斯模糊或者快速模糊算法实现。高斯模糊涉及到二维卷积...

    Android应用源码之100种图片处理效果大全项目.zip

    这个名为"Android应用源码之100种图片处理效果大全项目"的压缩包中,很可能包含了多种图片处理的示例代码,帮助开发者深入理解和实践Android平台上的图像操作技术。下面,我们将深入探讨其中可能包含的一些关键知识...

    调用系统资源管理器,并将图片转为单色图

    接下来,**图片转换为单色图**涉及到图像处理技术。在Android中,可以使用Bitmap类和Canvas进行操作。获取用户选择的图片后,将其解码为Bitmap,然后创建一个新的单色Bitmap。这通常通过遍历原图的每个像素,将其...

    android图片滤镜代码

    本文将深入探讨如何在不依赖JNI(Java Native Interface)的情况下实现Android图片滤镜的代码,尽管这种实现方式可能效率较低,但仍然可以满足基本需求。 首先,我们需要理解图片滤镜的工作原理。滤镜通常是通过...

Global site tag (gtag.js) - Google Analytics