bitmap相关知识
-
Android管理BITMAP内存在上个章节《如何缓存你的Bitmap》中,说明了Bitmap对象的缓存与回收。本章来说Bitmap对象内存的管理,由于Adroid版本的差异,所以bitmap的内存管理方式有所不同。先来简单说下Android系统各个版本管理Bitmap内存的差异,看看管理Bitmap的进化史。Android2.2及以下:当垃圾回收器回收时线程停止,导致渲染延迟。Android2.3以后增加了concurrent垃圾回收器,意味着不再引用的Bitmap对象能够立即回收。Android2.3.3及以下:Bitmap的像素数据时保持在native内存中的,而Bitmap对象本身保存在Dalvik head 中。在native内存中的像素信息的回收并不是按照常规回收,这使得对内存的把控变难,容易引起OOM。Android3.0开始Bitmap的像素数据也存储在Dalvik head中了。接下来讲述在不同Android版本中如何优化管理Bitmap内存。在Android2.3.3中管理Bitmap内存在Android2.3.3及以下
-
Android——Nv21高效率转Bitmap查找问题最近在项目中遇到将摄像头数据处理后转Bitmap的内存溢出问题,大概运行到七八个小时后,就出现了内存溢出,后来看了一下错误提示发现bitmap = BitmapFactory.decodeByteArray(stream.toByteArray(), 0, stream.size());这个地方会导致出现问题,故对此需要进行优化。优化之前首先看一下原先的处理方式private static Bitmap nv21ToBitmap(byte[] nv21, int width, int height) { Bitmap bitmap = null; try { YuvImage image = new YuvImage(nv21, ImageFormat.NV21, width,&
-
android view 转Bitmap 生成截图文章链接:https://mp.weixin.qq.com/s/FQmYfT-KYiDbp-0HzK_Hpw项目中经常会用到分享的功能,有分享链接也有分享图片,其中分享图片有的需要移动端对屏幕内容进行截取分享,说白了就是将view 转成bitmap 再到图片分享,还有一种情况是将不可见的view 转成bitmap ,这种view是没有直接显示在界面上的,需要我们使用inflate 进行创建的view。第一种先看通过 DrawingCache 方法来截取普通的view,获取它的视图(Bitmap)。private Bitmap createBitmap(View view) { view.buildDrawingCache(); Bitmap bitmap = view.getDrawingCache(); &n
-
Android打开MAT中的Bitmap原图在使用MAT查看应用程序内存使用情况的时候,我们经常会碰到Bitmap对象以及BitmapDrawable$BitmapState对象,而且在内存使用上,Bitmap所占用的内存占大多数.在这样的情况下, Bitmap所造成的内存泄露尤其严重, 需要及时发现并且及时处理.在这样的需求下, 当我们在MAT中发现和图片相关的内存泄露的时候, 如果能知道是那一张图片,对分析问题会有很大的帮助.本文就介绍如何将MAT中的Bitmap数组对象还原成一张图片。导出Bitmap原始数据在MAT中打开Dominator Tree视图 , 选择一个Bitmap对象 , 查看此时右边的Inspector窗口,内容如下图:这个视图中,可以看到这个Bitmap的一些基本的信息: mBuffer, mHeight, mWidth , mNativeBitmap等, 宽和高的值我们一会需要用的到 .mBuffer的定义在Bitmap.java中:123456789/** * Backing buffer for the Bitmap.
bitmap相关课程
-
Bitmap高效缓存 本门课程会介绍Bitmap相关知识点及如何高效加载,还会介绍Android缓存策略,通过综合前面所学模仿ImageLoader实现图片高效加载功能。
讲师:qndroid 中级 6547人正在学习
bitmap相关教程
- 1. 什么是 Bitmap Bitmap 在 Android 中对应一张图片文件,它是一个二位系统,通过编码记录了一张图片的完整形式。以左上角为原点,向右和向下建立一个(X , Y)坐标系,坐标系中的每一个点都成为一个“像素”。在不同编码格式的 Bitmap 里一个像素占的 bit 数有所不同,这些 bit 共同表征了当前像素的色值,可能是8 bit、16 bit 或者 24 bit 等等,最后将这些所有的色值组合起来就成了一张完整的原始图片。我们在 Android 中绘制的一切图像都是一个 Bitmap,我们可以创建一个 Bitmap 示例或者使用 Bitamp 工具来修改、优化一个图像资源。
- 位图:Bitmap 在上一节学习 Drawable 图像资源的时候我们在很多地方用到了 bitmap,bitmap 其实就是真实图片在 Android 中最直接的表现形式,这一节我们来仔细学习一下 Bitmap 的使用。
- 3. 加载 Bitmap 和 Drawable Android 提供了一个Bitmap类来处理 bitmap 图片相关的功能,接下来我们看看如何通过 Java 代码创建一个 Bitmap 并将 Bitmap 转换成 Drawable: AssetManager manager = getAssets(); // 从 assets 中读取 bitmap InputStream open = null; try { open = manager.open("imooc.png"); Bitmap bitmap = BitmapFactory.decodeStream(open); // 给 imageView 设置 bitmap 对象 ImageView view = (ImageView) findViewById(R.id.imageView1); view.setImageBitmap(bitmap); } catch (IOException e) { e.printStackTrace(); } finally { if (open != null) { try { open.close(); } catch (IOException e) { e.printStackTrace(); } }除此之外,还可以从“res/drawable”文件夹中获取 Drawable,并在代码中转换成 Bitmap 对象,如下:Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.bitmap);在获取的同时,我们还可以对图像进行任意比例的缩放:Bitmap originalBitmap = getBitmap();Bitmap resizedBitmap = Bitmap.createScaledBitmap(originalBitmap, newWidth, newHeight, false);反过来,我们也可以将 Bitmap 转换成一个 Drawable 对象:Drawable drawable = new BitmapDrawable(getResources(),bitmap);
- 2. Bitmap 的常用 API createBitmap(int width, int height, Bitmap.Config config):根据传入的宽高、创建一个可修改的 Bitmap 对象createBitmap(DisplayMetrics display, int width, int height, Bitmap.Config config):相比上一个接口,这个可以在创建的时候传入一些参数createBitmap(Bitmap src):根据传入的 Bitamp 创建一个新的 Bitampcopy(Bitmap.Config config, boolean isMutable):将 Bitamp 对象的所有像素复制到一个新的 Bitmap 当中extractAlpha():提取原始 Bitmap 的透明度并返回一个新的 BitampgetConfig():获取 Bitamp 的配置信息getDensity():返回 Bitamp 的图片像素密度getRowBytes():返回 Bitamp 图片的像素字节数组setPixel(int x, int y, int color):设置图片的(x, y)坐标点上的色值setDensity(int density):设置图片像素密度
- 4. Bitmap 使用示例 通过这两节的学习,我们知道 Drawable 和 Bitmap 可以相互转换,接下来编写一个示例完成将 ImageView 中的 Drawable 对象保存到本地的示例程序。
- 3. 获取 Bitamp 实例 Android 提供了多种方法获取 Bitamp 实例,我们可以直接从 ImageView 上拿到当前设置的图片的 Bitamp 对象:private Bitmap bmp;private ImageView img;img = (ImageView)findViewById(R.id.imageView);BitmapDrawable drawable = (BitmapDrawable)img.getDrawable();bmp = drawable.getBitmap();从上面的代码中也可以看到我们可以通过 Drawable 的getBitmap()方法从 Drawable 对象中提取出 Bitamp。Android 还提供了一个 BitampFractory 工厂对象,专门让我们去获取 Bitmap 实例,主要有以下几种常用方法:// 从资源文件中解码出 Bitmapprivate Bitmap getBitmapFromResource(Resources res, int resId) { return BitmapFactory.decodeResource(res, resId);}// 从图片文件中获取private Bitmap getBitmapFromFile(String pathName) { return BitmapFactory.decodeFile(pathName);}// 从像素数组中获取public Bitmap Bytes2Bimap(byte[] b) { if (b.length != 0) { return BitmapFactory.decodeByteArray(b, 0, b.length); } else { return null; }}// 读取输入流private Bitmap getBitmapFromStream(InputStream inputStream) { return BitmapFactory.decodeStream(inputStream);}
bitmap相关搜索
-
back
backbone
background
background attachment
background color
background image
background position
background repeat
backgroundcolor
backgroundimage
background属性
badge
bash
basics
basis
bat
bdo
bean
before
begintransaction