Android图像处理之Bitmap类

Bitmap是Android系统中的图像处理的最重要类之一。用它可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,并可以指定格式保存图像文件。本文从应用的角度,着重介绍怎么用Bitmap来实现这些功能。

一、Bitmap的生成

1.1 BitmapFactory decode出Bitmap

Bitmap实现在android.graphics包中。但是Bitmap类的构造函数是私有的,外面并不能实例化,只能是通过JNI实例化。这必然是 某个辅助类提供了创建Bitmap的接口,而这个类的实现通过JNI接口来实例化Bitmap的,这个类就是BitmapFactory。


图一、BitmapFactory主要方法及Options选项

利用BitmapFactory可以从一个指定文件中,利用decodeFile()解出Bitmap;也可以定义的图片资源中,利用decodeResource()解出Bitmap。

1.2 decode时的选项

在使用方法decodeFile()/decodeResource()时,都可以指定一个BitmapFacotry.Options

利用Options的下列属性,可以指定decode的选项:

  • inPreferredConfig 指定decode到内存中,手机中所采用的编码,可选值定义在Bitmap.Config中。缺省值是ARGB_8888。
  • inJustDecodeBounds 如果设置为true,并不会把图像的数据完全解码,亦即decodeXyz()返回值为null,但是Options的outAbc中解出了图像的基本信息。
  • inSampleSize 设置decode时的缩放比例。

利用Options的这些值就可以高效的得到一幅缩略图。


图二、BitmapFactory.decodeFile()

先设置inJustDecodeBounds= true,调用decodeFile()得到图像的基本信息[Step#2~4];

利用图像的宽度(或者高度,或综合)以及目标的宽度,得到inSampleSize值,再设置inJustDecodeBounds= false,调用decodeFile()得到完整的图像数据[Step#5~8]。

先获取比例,再读入数据,如果欲读入大比例缩小的图,将显著的节约内容资源。有时候还会读入大量的缩略图,这效果就更明显了。

二、利用Bitmap和Matrix实现图像变换

Bitmap可以和Matrix结合实现图像的剪切、旋转、缩放等操作。


图三、Bitmap方法

用源Bitmap通过变换生成新的Bitmap的方法:

?


1

2

3

4

5

public static Bitmap createBitmap(Bitmap source, int x, int y, intwidth, int height, 

            Matrix m, boolean filter) 

public static Bitmap createBitmap(Bitmap source, int x, int y, intwidth, int height) 

public static Bitmap createScaledBitmap(Bitmap src, int dstWidth, 

            int dstHeight,boolean filter)

第一个方法是最终的实现,后两种只是对第一种方法的封装。

第二个方法可以从源Bitmap中指定区域(x,y, width, height)中挖出一块来实现剪切;第三个方法可以把源Bitmap缩放为dstWidth x dstHeight的Bitmap。

设置Matrix的Rotate(通过setRotate())或者Scale(通过setScale()),传入第一个方法,可实现旋转或缩放。


图四、Bitmap实现旋转

三、保存图像文件

经过图像变换之后的Bitmap里的数据可以保存到图像压缩文件里(JPG/PNG)。

图五、保存Bitmap数据到文件

这个操作过程中,Bitmap.compress()方法的参数format可设置JPEG或PNG格式;quality可选择压缩质量;fOut是输出流(OutputStream),这里的FileOutputStream是OutputStream的一个子类。

总结一下,本文介绍Bitmap的使用方法——用Bitmap实现图像文件的读取和写入,并用Bitmap实现图像的剪切、旋转和缩放变换。

时间: 2024-10-06 14:59:28

Android图像处理之Bitmap类的相关文章

Android图像处理之Bitmap类(1)

Bitmap是Android系统中的图像处理的最重要类之一.用它可以获取图像文件信息,进行图像剪切.旋转.缩放等操作,并可以指定格式保存图像文件.本文从应用的角度,着重介绍怎么用Bitmap来实现这些功能. 一.Bitmap的生成 1.1 BitmapFactory decode出Bitmap    Bitmap实现在android.graphics包中.但是Bitmap类的构造函数是私有的,外面并不能实例化,只能是通过JNI实例化.这必然是 某个辅助类提供了创建Bitmap的接口,而这个类的实

c#图像处理入门(-bitmap类和图像像素值获取方法)

c#图像处理入门 -bitmap类和图像像素值获取方法 一.Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义的图像的对象.该类的主要方法和属性如下: 1. GetPixel方法和SetPixel方法:获取和设置一个图像的指定像素的颜色. 2. PixelFormat属性:返回图像的像素格式. 3. Palette属性:获取和设置图像所使用的颜色调色板. 4. Height Width属性:返回图像的高度和

Android图像处理之BitMap(2)

Bitmap 相关 1. Bitmap比较特别 因为其不可创建 而只能借助于BitmapFactory 而根据图像来源又可分以下几种情况: * png图片 如:R.drawable.tianjin Java代码 Bitmap bmp = BitmapFactory.decodeResource(this.getResources(), R.drawable.tianjin);  加载资源图片 Bitmap bmp = BitmapFactory.decodeResource(this.getRe

[Android] 图像处理软件整合之处理ColorMatrix和Intend传递路径显示图像

    经过几门考试之后,终于有时间整合下自己的Anroid项目"随手拍"的图像处理部分了,主要是结合前面几篇文章讲解的各种android图像处理技术和PopupWindow布局,图像初步整合效果如下.由于该软件目前还未答辩,所以结束后会共享所有的源代码,可能需要一个月后吧,抱歉~               在"随手拍"中点击发布,有添加图片按钮,点击出现"选择本地图片"和"照相截拆选择",显示图片至另一个处理界面,底部五个

Android图像处理之图形特效处理

一.Android变形矩阵--Matricx: 跟Android图像的色彩处理基本一样,只是将ColorMatrix换成了Matrix,ColorMatrix是4*5的矩阵,Matrix是3*3的.每个像素点表达了其坐标的X.Y信息: 当使用变换矩阵去处理每一个像素点的时候,与颜色矩阵的矩阵乘法一样,计算公式如下所示: 通常情况下,会让g=h=0,i=1,这样就使1=gX+hY+i    恒成立.因此,只需着重关注上面几个参数即可. 与色彩变换矩阵的初始矩阵一样,图形变换矩阵也有一个初始矩阵.就

Android 图像处理软件

在机器视觉实验室呆了有一年半时间了,但由于自己"任性".一直以来学习的内容都是自己来安排,我还是坚持认为没有最好和最简单的技术,只有自己喜欢的技术.不过说起来还是会觉得惭愧,经常听到师兄们谈论图像处理各种算法,可是一直到此软件诞生之前对机器视觉的知识可以说一概不知.自己研究的主要是Android系统的东西,从上层到下层都有所涉及.一直以来都想把自身所长和实验室主题联系上,这样可以多和实验室牛人沟通,也顺便刷刷存在感~由此向师兄师弟们请教一二,学了一点图像处理技术,做了一款Android

android 图像处理(黑白,模糊,浮雕,圆角,镜像,底片,油画,灰白,加旧,哈哈镜,放大镜)

转载文章请注明出处:http://blog.csdn.net/dangxw_/article/details/25063673 前些天在github上得到一个关于图像处理的源码(地址找不到了),挺全面,闲了分享一下.感谢开源. 对于图片的反转,倾斜,缩放之类的操作就不提了,网上太多了.大多都是用的Matrix现成方法. 原图: 一:圆角处理 效果: 代码: public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float round

[Android] 使用Matrix矩阵类对图像进行缩放、旋转、对比度、亮度处理

    前一篇文章讲述了Android拍照.截图.保存并显示在ImageView控件中,该篇文章继续讲述Android图像处理技术,主要操作包括:通过打开相册里的图片,使用Matrix对图像进行缩放.旋转.移动.对比度.亮度.饱和度操作,希望对大家有所帮助. 一. 显示打开图片     首先,设置activity_main.xml布局如下所示: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android

Android -- 图像处理(信息量超大)

Android的图像处理提供的API很帮,但是不适合用来写游戏,写游戏还是用专门的引擎比较好. Android的图像处理还有3D的处理的API,感觉超屌. 我先分享一下Android的一般的处理,比如平移.翻转等: 缩放.旋转.平移.镜面.倒影                                                       缩放 Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawab