`
韩悠悠
  • 浏览: 845049 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android开发中bitmap的优化

 
阅读更多

直接使用ImageView显示bitmap会占用较多资源,特别是图片较大的时候,可能导致崩溃。

  使用BitmapFactory.Options设置inSampleSize, 这样做可以减少对系统资源的要求。

  属性值inSampleSize表示缩略图大小为原始图片大小的几分之一,即如果这个值为2,则取出的缩略图的宽和高都是原始图片的1/2,图片大小就为原始大小的1/4

  Options中有个属性inJustDecodeBoundsSDK中是这么说的

  If set to true, the decoder will return null (no bitmap), but the out... fields will still be set, allowing the caller to query the bitmap without having to allocate the memory for its pixels.

  通过设置inJustDecodeBoundstrue,获取到outHeight(图片原始高度)和outWidth(图片的原始宽度),然后计算一个inSampleSize(缩放值)

 

 

  <?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
  <TextView
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="@string/hello"
  />
  <ImageView
  android:id="@+id/imageview"
  android:layout_gravity="center"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:scaleType="center"
  />
  </LinearLayout>
  java源码
  import android.app.Activity;
  import android.graphics.Bitmap;
  import android.graphics.BitmapFactory;
  import android.os.Bundle;
  import android.widget.ImageView;
  import android.widget.Toast;

  public class AndroidImage extends Activity {
 
  private String imageFile = "/sdcard/AndroidSharedPreferencesEditor.png";
  /** Called when the activity is first created. */
   
  @Override
  public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
   
  ImageView myImageView = (ImageView)findViewById(R.id.imageview);
  //Bitmap bitmap = BitmapFactory.decodeFile(imageFile);
  //myImageView.setImageBitmap(bitmap);
 
  Bitmap bitmap;
  float imagew = 300;
  float imageh = 300;
 
  BitmapFactory.Options bitmapFactoryOptions = new BitmapFactory.Options();
  bitmapFactoryOptions.inJustDecodeBounds = true;
  bitmap = BitmapFactory.decodeFile(imageFile, bitmapFactoryOptions);
 
  int yRatio = (int)Math.ceil(bitmapFactoryOptions.outHeight/imageh);
  int xRatio = (int)Math.ceil(bitmapFactoryOptions.outWidth/imagew);
 
  if (yRatio > 1 || xRatio > 1){
   if (yRatio > xRatio) {
    bitmapFactoryOptions.inSampleSize = yRatio;
    Toast.makeText(this,
      "yRatio = " + String.valueOf(yRatio),
      Toast.LENGTH_LONG).show();
   }
   else {
    bitmapFactoryOptions.inSampleSize = xRatio;
    Toast.makeText(this,
      "xRatio = " + String.valueOf(xRatio),
      Toast.LENGTH_LONG).show();
   }
  }
  else{
   Toast.makeText(this,
     "inSampleSize = 1",
     Toast.LENGTH_LONG).show();
  }
 
  bitmapFactoryOptions.inJustDecodeBounds = false;
  bitmap = BitmapFactory.decodeFile(imageFile, bitmapFactoryOptions);
  myImageView.setImageBitmap(bitmap);
  }
   
  }

 

分享到:
评论

相关推荐

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

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

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

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

    Android下利用Bitmap切割图片

    在Android开发中,Bitmap是处理图像的基本类,用于在内存中表示位图图像。当我们需要对图片进行裁剪、缩放或进行其他操作时,Bitmap提供了丰富的功能。本篇文章将详细探讨如何在Android环境下利用Bitmap来切割图片。...

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

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

    Android Drawable Bitmap 相互转换

    在Android开发中,Drawable和Bitmap是两种常用的图像资源类型,它们各有特点且在不同场景下有不同的优势。了解和掌握它们之间的相互转换对于优化性能和提高用户体验至关重要。本篇将详细介绍如何在Android中进行...

    Bitmap的相关优化及使用

    Bitmap优化是Android开发中的重要环节,合理使用上述策略和技巧,可以显著降低内存消耗,提升应用性能。实践中,开发者应结合项目需求,灵活运用各种方法,实现最佳的Bitmap管理。同时,持续关注Android新版本的优化...

    Bitmap(3)-android中操作Bitmap

    大图处理是Android开发中的常见问题,可以采用分块加载、视图区域裁剪等策略,避免一次性加载整个图像。 10. 展示高性能的图片加载 使用`PurgeableBitmap`(API 21+)或`PoolableBitmap`(如Glide库)可以实现...

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

    在Android开发中,Bitmap是用于处理图像的基本类,它代表了一个位图图像。有时我们需要将Bitmap对象保存到本地,例如用户拍摄的照片或者加载的网络图片,以便后续使用或分享。本篇文章将深入探讨如何在Android中将...

    初中级Android开发社招面试之Bitmap.pdf

    在进行Android开发过程中,处理Bitmap图片是一个经常遇到的技术挑战。以下是在面试中可能会被问到的几个关于Bitmap的典型问题以及对应的知识点解析。 1. Bitmap使用需要注意哪些问题? - 合适的图片规格选择:优化...

    初中级Android开发社招面试之Bitmap

    Bitmap是Android平台中...综上所述,Bitmap是Android开发中的核心组件,面试中涉及的题目通常涵盖Bitmap的加载、解码、内存管理、缓存、性能优化等多个方面。掌握这些知识点,对于初中级Android开发者来说至关重要。

    Android开发中Bitmap高效加载使用详解

    在Android开发中,Bitmap对象是处理图像数据的核心类,但如果不正确地操作,它可能导致应用程序出现内存溢出(OOM)问题。这是因为Android系统对每个应用的内存限制相对较严,尤其是在加载大尺寸或高分辨率的图片时...

    bitmap上传图片demo

    在Android开发中,Bitmap是处理图像数据的基本类,它用于表示位图图像。"bitmap上传图片demo"是一个示例项目,展示了如何利用Bitmap处理本地图片并进行上传,同时提供了将图片裁剪为圆形以适合作为头像的功能。在这...

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

    在Android中处理24位深度的Bitmap文件,涉及到内存管理、解码以及显示等多个环节,这里我们将详细探讨这些知识点。 1. **内存管理**:由于24位深度的Bitmap文件占用内存较大,处理不当可能导致内存溢出。Android...

    android 把一个view视图转换成bitmap 保存到本地

    在Android开发中,有时我们需要将View的显示内容截图并保存为Bitmap,以便进行分享或者其他图形处理操作。这个过程涉及到Android的视图系统、图形处理以及文件存储等多个知识点。以下将详细讲解如何实现这一功能。 ...

    Android Bitmap 处理示例

    在Android开发中,Bitmap是用于表示图像数据的核心类,它在UI显示和图像处理中扮演着重要角色。然而,由于Bitmap对象通常占用大量的内存,不当的处理可能导致内存溢出(Out Of Memory)问题,因此对Bitmap进行高效...

    【Android】使用GLSurfaceView+Canera预览+保存帧Bitmap

    在Android平台上,开发一款涉及到摄像头预览和图像处理的应用时,`GLSurfaceView`和`Camera`的结合使用是常见的技术方案。`GLSurfaceView`是Android提供的一个用于渲染OpenGL ES图形的视图组件,而`Camera`则负责...

    android Bitmap特效处理

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

    解析Android开发优化之:对Bitmap的内存优化详解

    这里就有疑问了,Android系统有自己的垃圾回收机制,可以不定期的回收掉不使用的内存空间,当然也包括Bitmap的空间。那为什么还需要这个方法呢? Bitmap类的构造方法都是私有的,所以开发者不能直接new出一个Bitmap...

    Android bitmap图片压缩工具类

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

    Android bitmap

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

Global site tag (gtag.js) - Google Analytics