`
superhj1987
  • 浏览: 205500 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Android位图总结

阅读更多

由于项目中牵扯到了对位图(android.graphics.Bitmap)的操作,于是对照Android的参考文档详细地研究了一下Android提供的位图相关功能。
一、对位图的获取
在Android的SDK中提供了一个BitmapFactory 类。采用此类的几个方法能够从一个文件路径或者输入流中得到位图。
包:android.graphics
类:BitmapFactory
Android SDK中的简介:Creates Bitmap objects from various sources, including files, streams, and byte-arrays.
此类其提供了以下方法来获取Bitmap,这些方法都是静态的:
1、decodeByteArray(byte[] data, int offset, int length)从一个字节数组中得到数据转换为位图。
2、decodeFile(String pathName)由一个图像文件路径的得到位图(支持jpg、png、bmp格式)
3、decodeFileDescriptor(FileDescriptor fd)由一个文件描述符得到位图。
4、decodeResource(Resources res, int id)由资源ID获取位图
5、decodeStream(InputStream is)由图片输入流获取位图。
这里,由于Android系统本身对apk程序的限制,当加载大图片时会产生OutOfMemoryError。可以采取两种办法解决:
先使用android.provider.MediaStore.Images.Media类的query(ContentResolver cr, Uri uri, String[] projection, String where, String orderBy)方法获得对应的图片所对应的id,然后使用android.provider.MediaStore.Images.Thumbnails类的queryMiniThumbnail(ContentResolver cr, long origId, int kind, String[] projection)获得图片对应的缩略图的路径,再使用BitmapFactory的decodeFile(String pathname)获取到图片的缩略图,这样即可避免内存溢出的发生。
采取压缩图片的方法对图片进行压缩。这里主要还是使用BitmapFactory类,对于上面提到过的能够获取位图的几个方法,都对应着另一个多了一个参数的方法,例如decodeFile(String pathName)对应着decodeFile(String pathName, BitmapFactory.Options opts)这个方法,其他的可查阅参考文档。其中,通过引入opts这个参数,对其进行相关的设置,最后能得到一个被压缩的图片。
二、对位图信息的获取
要获取位图信息,比如位图大小、是否包含透明度、颜色格式等,获取得到Bitmap就迎刃而解了,这些信息在Bitmap的函数中可以轻松获取到。Android SDK中对Bitmap有详细说明,这里辅助说明以下2点:
1、在Bitmap中对RGB颜色格式使用Bitmap.Config定义,仅包括ALPHA_8、ARGB_4444、ARGB_8888、RGB_565,缺少了一些其他的,比如说RGB_555,在开发中可能需要注意这个小问题;
2、Bitmap还提供了compress()接口来压缩图片,不过Android SDK只支持PNG、JPG格式的压缩;其他格式的需要Android开发人员自己补充了。
三、位图的显示
位图的显示,一般可以在界面中放置ImageView控件,然后调用android.widget.ImageView类的setImageBitmap(Bitmap bm)方法将位图显示出来。另外,可以使用核心类android.graphics.Canvas的drawBirmap()方法显示位图,或者借助于BitmapDrawable来将Bitmap绘制到Canvas。
四、位图的缩放
位图的缩放,在Android SDK中提供了2种方法:
1、将一个位图按照需求重画一遍,画后的位图就是我们需要的了,与位图的显示几乎一样:drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)
在原有位图的基础上,缩放原位图,创建一个新的位图: createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)
归结到底,位图缩放的本质就是将原始位图按照需求显示出来,创造一张新的位图。
五、位图的旋转
位图的旋转,离不开Matrix。Matrix在线性代数中都学习过,Android SDK提供了Matrix类,可以通过各种接口来设置矩阵。例子如下“
Matrix matrix = new Matrix();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)
在原有位图旋转的基础上,创建新位图。
六、位图的截取
对于位图的规则形状如矩形的截取,很容易通过Matrix进行实现。例子如下:
Bitmap croppedImage;
// 取得裁剪的矩形
Rect r = mCrop.getCropRect();
if(r == null) return;
int width = r.width();
int height = r.height();
// 生成裁剪的图片
croppedImage = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(croppedImage);
Rect dstRect = new Rect(0, 0, width, height);
canvas.drawBitmap(mBitmap, r, dstRect, null);
而对于位图的不规则形状的截取,找不到很好的解决办法。曾想过直接对像素进行操作,最终因为算法的的复杂而放弃。一次偶然的机会,在阅读一篇博文时,我发现了使用android.graphics.Canvas的clipPath方法不仅仅可以达到高亮显示路径的目的,也能够达到任意形状截取图片的目的,从而解决了此问题。
以上就是对Android的位图功能进行的总结,以及一些自己实践中得出的想法和结论。更深入的内容需要仔细地去阅读研究Android SDK文档并付之于实践。

 

分享到:
评论

相关推荐

    android画图总结.pdf

    `Bitmap`是Android中用于表示位图图像的对象。它是Android图像处理中最基本的单位之一,几乎所有的图像处理操作都基于`Bitmap`进行。 **主要接口** - `createBitmap(int width, int height, Bitmap.Config config)...

    android大位图二次采样处理三

    总结,大位图的二次采样处理是Android开发中解决内存问题的关键技术。开发者需要理解其原理,掌握计算采样率的方法,并结合最佳实践,如使用流式加载和第三方库,来优化位图处理,从而提升应用的性能和用户体验。...

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

    本项目"android-image-filter-ndk"是一个开源示例,它展示了如何利用NDK在C语言中处理Android位图,实现图像过滤器功能。 一、Android NDK基础 1. NDK的作用:NDK为Android应用提供了本地编程环境,使得开发者可以...

    android画图总结

    本文将对Android画图的相关知识进行详细的总结,包括Bitmap、Drawable、Paint、Animation等核心概念。 首先,我们来了解一下【Android画图学习总结(一)——类的简介.doc】中提到的基础知识。在Android中,Canvas...

    电信设备-一种基于Android内核的动态生成位图图像的信息显示方法.zip

    总结来说,基于Android内核的动态生成位图图像的信息显示方法是一种高效且灵活的解决方案,它允许电信设备根据实际需要动态创建和更新图像,同时优化系统资源的使用。通过深入理解Android内核和位图操作,开发者可以...

    android自学总结

    在本篇"android自学总结"中,我们将深入探讨Android开发环境的构建,以及在实际编程中的一些关键概念和技术。 首先,Android开发通常采用Eclipse集成开发环境(IDE),配合ADT(Android Developer Tools)插件、SDK...

    android Bitmap用法总结

    Bitmap是Android平台中用于处理图像的核心类,它用于表示位图图像数据。下面是对Bitmap用法的详细总结: 1. **Drawable转换为Bitmap**: 当我们需要将一个Drawable对象(如从XML布局文件中加载的图像)转换为...

    android中将图片转化成黑白

    总结来说,将Android中的图片转化为黑白,主要包括以下步骤: 1. 获取Bitmap对象。 2. 二值化处理:遍历每个像素,根据阈值决定其为黑或白。 3. 将处理后的Bitmap显示到UI上。 这个过程可以自定义实现,也可以借助...

    Android-使用Glide在Android中加载SVG

    总结一下,使用Glide加载SVG图像在Android中需要以下步骤: 1. 添加`androidsvg`或其他SVG解析库至项目。 2. 创建自定义Glide模块以处理SVG到Bitmap的转换。 3. 在需要加载SVG的代码中调用Glide,并指定`asBitmap()`...

    Android获取图片的RGB值

    总结一下,Android获取图片RGB值主要涉及Bitmap对象的使用,包括解码图片、获取像素信息以及对RGB值进行处理和转换。理解这些知识点对于进行图像处理、分析和算法实现至关重要。在实际开发中,我们还需要考虑性能和...

    Android画图学习总结(二)-转_玉树临疯

    根据提供的文件信息,本文将对Android绘画技术进行深入解析,主要围绕如何获取位图、提取位图信息、显示位图以及位图的操作等几个方面展开。 ### 一、获取位图资源 在Android开发中,获取位图资源是绘制图像的基础...

    Android UI开发专题

    #### 四、总结 通过本专题的学习,我们了解到`android.content.res.Resources`类的强大功能以及如何利用`android.graphics`包中的类和方法来进行复杂的图像处理和绘制。这对于Android UI开发者来说是非常宝贵的资源...

    android_UI界面设计

    Android_UI 界面设计知识点总结 Android_UI 界面设计是指在 Android 平台上设计和开发应用程序的用户界面的过程。好的界面设计可以提高用户体验和应用程序的可用性。以下是 Android_UI 界面设计的知识点总结: 一...

    Android_CarShowCase:示例应用程序,了解如何在Android上使用位图

    总结来说,Android_CarShowCase项目是一个绝佳的学习资源,它涵盖了Android位图操作的核心概念,如位图的加载、缩放、显示、内存管理及缓存策略。对于任何希望提升Android图像处理能力的开发者来说,深入研究此项目...

    surfaceview控制位图缩放、拖移

    总结来说,"SurfaceView控制位图缩放、拖移"的Demo展示了如何结合SurfaceView、Matrix、MotionEvent和Canvas来实现位图的动态操作,这对于创建涉及图像处理的Android应用非常有帮助。理解并掌握这些知识点,有助于...

    Android-Svg动画播放

    总结来说,Android开发者可以利用SVG优化图形资源,提高应用质量。通过工具如vmde将PNG转换为SVG,然后结合Android的VectorDrawable或第三方库在应用中实现SVG的显示与动画。这不仅可以提升视觉体验,也有助于提高...

    Android实现Bitmap位图旋转效果

    在Android开发中,对位...总结起来,Android中的位图旋转可以通过`Matrix`和`Canvas`结合使用实现,这一操作在游戏、动画、图像编辑等场景中非常常见。理解并熟练掌握这些知识点对于开发高质量的Android应用至关重要。

    android重要知识点总结

    `Bitmap`是位图图像,可以直接在Canvas上绘制。`Canvas`是画布,用于在屏幕上画图,而`Paint`是画笔,包含颜色、样式等属性,用于控制如何在Canvas上绘制。`Drawable`可以包含多个Bitmap,同时提供了更高级别的操作...

    Android矢量图Demo

    总结起来,Android的SVG支持为开发者提供了丰富的图形绘制和动画效果,同时保持了高质量和性能。通过`VectorAsset`工具导入SVG,`VectorDrawable`和`AnimatedVectorDrawable`进行渲染和动画操作,开发者可以轻松地在...

    OPENCV位图叠加视频

    OpenCV提供了Python、Java等语言接口,支持Windows、Linux、Android和Mac OS等操作系统。因其强大的功能和广泛的适用性,OpenCV被广泛应用于图像处理、视频分析、目标检测与识别等多个领域。 #### 二、位图叠加技术...

Global site tag (gtag.js) - Google Analytics