`
quanminchaoren
  • 浏览: 932405 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android Bitmap使用

阅读更多

通过前一篇 的学习,对Android 画图核心部分有了一定的了解,后面篇幅,我们将详细介绍Android中的各种画图对象的使用,首先介绍我们最常用的Bitmap(位图)。位图是我们开发中最常用的资源,毕竟一个漂亮的界面对用户是最有吸引力的。按照对位图的操作,分为以下几个功能分别介绍:

1.从资源中获取位图
2.获取位图的信息
3.显示位图
4.位图缩放
5.位图旋转
1. 从资源中获取位图
在前一篇幅介绍了:先获取Resource,然后可以通过资源ID获取Drawable,也可以通过资源ID获取资源文件的数据流。使用第一种方法比较容易,下面详细说明第二种方法。通过Resource的函数:InputStream  openRawResource(int id)获取得到资源文件的数据流后,也可以通过2种方法来获取Bitmap,如下:

使用BitmapDrawable

(A Drawable that wraps a bitmap and can be tiled, stretched, or aligned.)
 
1.使用BitmapDrawable (InputStream is)构造一个BitmapDrawable;
2.使用BitmapDrawable类的getBitmap()获取得到位图;
BitmapDrawable也提供了显示位图等操作
 
使用BitmapFactory

(Creates Bitmap objects from various sources, including files, streams, and byte-arrays.)
 
1.使用BitmapFactory类decodeStream(InputStream is)解码位图资源,获取位图
BitmapFactory的所有函数都是static,这个辅助类可以通过资源ID、路径、文件、数据流等方式来获取位图。

以上方法在编程的时候可以自由选择,在Android SDK中说明可以支持的图片格式如下:png (preferred), jpg (acceptable), gif (discouraged),虽然bmp格式没有明确说明,但是在Android SDK Support Media Format中是明确说明了。

2. 获取位图的信息
要获取位图信息,比如位图大小、是否包含透明度、颜色格式等,获取得到Bitmap就迎刃而解了,这些信息在Bitmap的函数中可以轻松获取到。Android SDK中对Bitmap有详细说明,阅读起来也比较容易,不在此详细说明,这里只是辅助说明以下2点:

•在Bitmap中对RGB颜色格式使用Bitmap.Config定义,仅包括ALPHA_8、ARGB_4444、ARGB_8888、RGB_565,缺少了一些其他的,比如说RGB_555,在开发中可能需要注意这个小问题;
•Bitmap还提供了compress()接口来压缩图片,不过AndroidSAK只支持PNG、JPG格式的压缩;其他格式的需要Android开发人员自己补充了。
3. 显示位图
显示位图需要使用核心类Canvas,可以直接通过Canvas类的drawBirmap()显示位图,或者借助于BitmapDrawable来将Bitmap绘制到Canvas。具体如何显示位图不是主要的问题,主要问题是如何获取Canvas,参考Snake中的方法,做了个简单的例子 testView,提供给大家下载 。

testView例子介绍:其包含2个类testActivity,testView;testActivity继承与 Activity,testView继承与View。这个例子就是将testView直接作为testActivity的窗口,这样我们就可以直接在 testView画图了。具体如何实现的,请大家参考testActivity的onCreate()中的代码,以及layout\main.xml中的设置。在testView的onDraw()直接画图,结果在例子程序运行后就可以直接在界面上显示了。

4. 位图缩放
位图的缩放,在Android SDK中提供了2种方法:

•将一个位图按照需求重画一遍,画后的位图就是我们需要的了,与位图的显示几乎一样:
drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)
•在原有位图的基础上,缩放原位图,创建一个新的位图:
createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)
第2种方法一看就明白,对于第一种方法,举个简单的例子来说明:
int w = 320,h = 240;
String mstrTitle = “感受Android带给我们的新体验”;
Bitmap mbmpTest = Bitmap.createBitmap(w,h, Config.ARGB_8888);
Canvas canvasTemp = new Canvas(mbmpTest);
canvasTemp.drawColor(Color.WHITE);
Paint p = new Paint();
String familyName = “宋体”;
Typeface font = Typeface.create(familyName,Typeface.BOLD);
p.setColor(Color.RED);
p.setTypeface(font);
p.setTextSize(22);
canvasTemp.drawText(mstrTitle,0,100,p);
显示位图mbmpTest,就会发现一张320×240、白色背景、红色“宋体”文字的图片,如下:
 
这个例子没有位图缩放的任何操作?的确,但是这是我在想如何写个简单的位图缩放的小程序时,最先想到的。看完这个例子,我想你就应该明白如何实现位图的缩放了。不要小瞧了这个例子,虽然与位图缩放关系不大,但是却可以让你理解位图缩放的本质:将原始位图按照需求显示出来,就创造了一张新的位图。

5. 位图旋转
位图的旋转,离不开Matrix。Matrix在线性代数中都学习过,Android SDK提供了Matrix类,可以通过各种接口来设置矩阵。结合上面的例子程序,将位图缩放例子程序在显示位图的时候前,增加位图旋转功能,修改代码如下:
Matrix matrix = new Matrix();
//matrix.postScale(0.5f, 0.5f);
matrix.setRotate(90,120,130);
canvas.drawBitmap(mbmpTest, matrix, mPaint);
旋转后的位图显示如下:
 
除了这种方法之外,我们也可以在使用Bitmap提供的函数如下:
public static Bitmap createBitmap (Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter),在原有位图旋转的基础上,创建新位图。

总结说明
对位图的操作,结合Android SDK中的类,详细的介绍完了。最后还需要强调的是:这篇文章只是对Android SDK中代码阅读分析,它代替不了你阅读Android SDK,深入的学习还是要仔细的阅读Android SDK。

分享到:
评论

相关推荐

    Android-使用Matrix对Bitmap进行处理

    在Android开发中,Bitmap是用于图像处理的基本对象,它存储并表示了图像的数据。而Matrix则是Android图形系统中的一个关键类,它允许我们对图像进行各种变换操作,如旋转、缩放、平移和倾斜等。这个教程将深入探讨...

    Android Bitmap使用demo

    在Android开发中,Bitmap是用于表示图像数据的基本类,它在UI设计和图像处理中扮演着重要角色。本文将深入探讨Bitmap的使用,包括如何创建和编辑Bitmap,以及如何调整Bitmap的明度、亮度和RGB色相。 首先,让我们...

    Android Bitmap.getPixels的正确理解演示源码

    Android Bitmap.getPixels的正确理解演示源码,参考文章《Android Bitmap入门:getPixels的正确理解》

    android中对Bitmap图片设置任意角为圆角

    在Android开发中,Bitmap是用于表示图像数据的基本对象,它是一种内存中的图片表示形式。而当我们需要在应用程序中展示带有圆角的图片时,通常会用到Bitmap的处理技巧。本篇文章将深入探讨如何在Android中对Bitmap...

    android Bitmap相关知识介绍~~~

    Android Bitmap 相关知识介绍 Android 中的 Bitmap 是一种特殊的类,它不能被直接创建,而只能通过 BitmapFactory 来获取。BitmapFactory 提供了...了解 Bitmap 的使用方法可以帮助我们更好地开发 Android 应用程序。

    Android Bitmap 处理示例

    - **内存缓存**:使用LRUCache(Least Recently Used Cache)或Android提供的WeakReference实现,存储最近使用的Bitmap。当内存不足时,最不常使用的图片会被自动移除。 - **磁盘缓存**:将Bitmap保存到外部存储,...

    android Bitmap特效处理

    在Android开发中,Bitmap是用于表示图像数据的基本类,它在UI设计和图像处理中扮演着重要角色。本文将深入探讨如何使用Bitmap实现各种特效处理,包括黑白特效、底片特效、浮雕特效、模糊特效、锐化特效以及怀旧特效...

    Android下利用Bitmap切割图片

    在Android中,我们可以使用BitmapFactory类来解析图片资源,将其转化为Bitmap对象。例如: ```java Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image); ``` 接下来,我们讨论...

    android Bitmap用法总结

    以上就是Android中Bitmap的一些常见用法,包括创建、转换、保存、缩放以及与ImageView的配合使用。在处理大量图片时,注意优化内存使用,避免OutOfMemoryError。合理运用上述方法可以有效地管理Bitmap资源,提高应用...

    Android上解析24位深度Bitmap文件示例

    在Android平台上,Bitmap是用于表示图像数据的基本类,它提供了对像素颜色的直接访问。24位深度的Bitmap文件,通常指的是每个像素包含红、绿、蓝三个通道,每个通道用8位表示,总共24位。这种格式的Bitmap色彩丰富,...

    Android bitmap图片压缩工具类

    在Android开发中,Bitmap对象是处理图像的主要方式,但它们可能会消耗大量内存,尤其是在处理大图或高分辨率图片时。为了优化性能并防止因内存不足引发的“OutOfMemoryError”,开发者通常需要对Bitmap进行压缩。...

    Android图片Bitmap和字符串String之间的相互转换

    在Android开发中,处理图像数据是一项常见的任务,而Bitmap和String是两个核心的数据类型,分别代表位图图像和文本字符串。Bitmap对象用于存储和显示图像,而String则常用于保存和传输文本信息。本篇文章将深入探讨...

    Android 实现把bitmap图片的某一部分的颜色改成其他颜色

    在 Android 中,我们可以使用 Bitmap 类来处理 bitmap 图片,该类提供了多种方法来处理 bitmap 图片,例如 getPixels() 方法可以获取 bitmap 图片的像素颜色值,setPixels() 方法可以设置 bitmap 图片的像素颜色值。...

    Android中将Bitmap转换成单色的Bmp图片

    Android不支持将Bitmap转换成单色的Bmp图片,所以参考Bmp格式说明,自己写了一个转换类。亲测有效!!!

    android bitmap outOfMemory解决方法

    4. **使用LruCache或 Fresco、 Glide等图片库**:Android提供了`LruCache`类,可以帮助实现图片缓存,避免频繁地创建和销毁Bitmap。此外,第三方库如Fresco和Glide,它们内部有优化的内存管理和图片缓存机制,可以更...

    Android将bitmap保存到本地png/jpg格式等

    在Android中,我们可以使用Bitmap的compress方法来实现这个功能。该方法接受一个CompressFormat参数,用于指定保存的图片格式(如PNG或JPEG),以及一个质量参数(0-100),用于控制压缩的质量。质量越高,图片的...

    Android中把bitmap存成BMP格式图片的方法

    在Android开发中,有时我们需要将Bitmap对象转换成不同的图片格式,比如BMP。BMP(Bitmap File Format)是一种常见的位图文件格式,但它并不像JPEG或PNG那样被Android SDK直接支持。本文将详细介绍如何在Android中将...

    Android bitmap

    位图(Bitmap)是Android开发中不可或缺的部分,它用于表示图像数据。Bitmap类是Android系统提供的用于处理图像的主要类,但需要注意的是,Bitmap对象本身并不直接创建,而是通过BitmapFactory类来解析并创建。...

    Android bitmap工具类

    在Android开发中,Bitmap是用于处理图像的基本类,它提供了对像素级别的操作。BitmapUtils工具类是为了方便开发者在处理图片时进行各种操作,比如转换、压缩、存储等。本篇文章将详细探讨`Android bitmap工具类`,...

    Android中Bitmap用法实例分析

    在Android开发中,Bitmap是处理图像的基本类,用于在内存中表示位图图像。本文将深入探讨Bitmap的用法,包括图片的加载、属性设置以及旋转等关键技巧。 首先,我们来看如何加载存储在SD卡上的图片。在Android中,...

Global site tag (gtag.js) - Google Analytics