`
debuglog
  • 浏览: 196728 次
社区版块
存档分类
最新评论

使用bitmap缩略图,解决图片大小超过预算的VM的问题

阅读更多
Android 2.3.3         
Eclipse Version: 3.7.0         
LogCat 

 

Activity中显示大图,部分源代码如下:

			try {
				bitmap = BitmapFactory.decodeFile("/" + nokia.getBitmap(), opt);
			} catch (Exception e) {
				e.printStackTrace();
			}
			nokiaImage.setImageBitmap(bitmap);

 
使用过程中
LogCat 报错信息:

02-07 13:14:22.947: DEBUG/dalvikvm(33246): GC_EXTERNAL_ALLOC freed 75K, 61% free 3080K/7751K, external 14227K/16275K, paused 100ms
02-07 13:14:23.017: ERROR/dalvikvm-heap(33246): 4147200-byte external allocation too large for this process.
02-07 13:14:23.137: ERROR/GraphicsJNI(33246): VM won't let us allocate 4147200 bytes
02-07 13:14:23.148: DEBUG/dalvikvm(33246): GC_FOR_MALLOC freed 2K, 61% free 3078K/7751K, external 14227K/16275K, paused 37ms
02-07 13:14:23.191: DEBUG/skia(33246): --- decoder->decode returned false
02-07 13:14:23.191: DEBUG/AndroidRuntime(33246): Shutting down VM
02-07 13:14:23.191: WARN/dalvikvm(33246): threadid=1: thread exiting with uncaught exception (group=0x40015560)
02-07 13:14:23.218: ERROR/AndroidRuntime(33246): FATAL EXCEPTION: main
02-07 13:14:23.218: ERROR/AndroidRuntime(33246): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
02-07 13:14:23.218: ERROR/AndroidRuntime(33246): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
02-07 13:14:23.218: ERROR/AndroidRuntime(33246): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:470)
02-07 13:14:23.218: ERROR/AndroidRuntime(33246): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:284)
02-07 13:14:23.218: ERROR/AndroidRuntime(33246): at com.tmall.nokia.Book.handerUI(Book.java:522)
02-07 13:14:23.218: ERROR/AndroidRuntime(33246): at com.tmall.nokia.Book$1.run(Book.java:396)
02-07 13:14:23.218: ERROR/AndroidRuntime(33246): at android.os.Handler.handleCallback(Handler.java:587)
02-07 13:14:23.218: ERROR/AndroidRuntime(33246): at android.os.Handler.dispatchMessage(Handler.java:92)
02-07 13:14:23.218: ERROR/AndroidRuntime(33246): at android.os.Looper.loop(Looper.java:123)
02-07 13:14:23.218: ERROR/AndroidRuntime(33246): at android.app.ActivityThread.main(ActivityThread.java:3683)
02-07 13:14:23.218: ERROR/AndroidRuntime(33246): at java.lang.reflect.Method.invokeNative(Native Method)
02-07 13:14:23.218: ERROR/AndroidRuntime(33246): at java.lang.reflect.Method.invoke(Method.java:507)
02-07 13:14:23.218: ERROR/AndroidRuntime(33246): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-07 13:14:23.218: ERROR/AndroidRuntime(33246): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-07 13:14:23.218: ERROR/AndroidRuntime(33246): at dalvik.system.NativeStart.main(Native Method)
02-07 13:14:23.268: WARN/ActivityManager(61): Force finishing activity com.tmall.nokia/.Book

 
发生错误的原因分析:
主要是bitmap图片尺寸较大,使用时超过预算的VM;

 

网上有两种解决办法:
一种是增加VM大小

		 VMRuntime.getRuntime().setMinimumHeapSize(12 * 1024 * 1024);
		 VMRuntime.getRuntime().setTargetHeapUtilization(0.85f);

经个人测试无效;

 

另一种是使用缩略图,缩小图片的尺寸大小

		//图片缩小倍数
		opt.inSampleSize = 2; 

可以实现。

3
1
分享到:
评论

相关推荐

    Android下利用Bitmap切割图片

    在实际应用中,我们可能需要根据需求动态调整图片大小或比例,这时可以使用Bitmap.createScaledBitmap方法。这个方法可以将Bitmap缩放到指定的尺寸,同时保持原图像的比例: ```java // 缩放Bitmap至新的尺寸 ...

    ANDROID 获取最近的相片的缩略图

    通过研究和理解这个代码,开发者可以更好地掌握如何在Android应用中正确处理图片缩略图的获取和展示,同时解决可能出现的问题。 总之,获取Android设备上的最近相片缩略图需要正确查询MediaStore,按时间排序,并...

    Bitmap加载、变换、显示图片

    - **大小压缩**:通过`Bitmap.createScaledBitmap(Bitmap src, int dstWidth, int dstHeight, boolean filter)`方法创建指定尺寸的缩略图,`filter`参数决定是否平滑缩放。 3. **Bitmap变换** - **旋转**:`...

    bitmap上传图片demo

    如果需要动态调整图片大小以适应视图,可以使用`Bitmap.createScaledBitmap()`方法。 4. 图片裁剪: 在这个示例中,裁剪圆形头像是一个常见的需求,通常通过Canvas和Paint来实现。首先创建一个圆形Bitmap,然后在...

    C#图片生成缩略图和图片水印

    1. 加载原始图片和水印图片(如果水印是图像):与创建缩略图类似,使用`Bitmap`类加载原始图片和水印图片。 2. 创建Graphics对象:对原始图片创建Graphics对象,用于绘制水印。 3. 设置文字属性(如果水印是文字)...

    解决.net缩略图质量问题 Asp.net生成高质量缩略图

    本文将深入探讨如何在Asp.net中解决这些问题,以生成高质量的缩略图。 首先,理解缩略图生成的基本过程至关重要。通常,我们使用图像处理库来读取原始图片,然后调整尺寸以创建缩略图。在.NET中,System.Drawing...

    如何在Delphi中生成图片缩略图的例子.rar

    本文将详细讲解如何使用Delphi来创建图片缩略图,并以提供的源代码为例进行解析。 首先,我们需要了解Delphi中的关键组件和API。在Delphi中,可以使用`TImage`组件来显示图像,但生成缩略图则需要更底层的图像处理...

    Listview显示缩略图

    在Windows Forms应用开发中,`ListView`控件通常用于展示列表数据,如文件名、文本信息等。然而,它也支持显示图像,特别是在处理图片...此外,对于非常大的图片集合,可以考虑使用分页策略或者只在需要时加载缩略图。

    mfct图片缩略图

    在Windows编程领域,MFC(Microsoft ...综上所述,"mfct图片缩略图"的实现涉及了MFC中的图像处理、控件使用、用户交互、文件操作等多个方面的知识点,需要结合Windows图形编程的基本原理和MFC类库的特性来完成。

    .net下实现图片缩略图

    此外,对于图片压缩,可以使用`Image.Save()`方法的第二个参数设置`EncoderParameter`和`Encoder`来调整JPEG质量,从而减小图片大小。例如: ```csharp ImageCodecInfo jpegCodec = ImageCodecInfo....

    C# 将文件夹下所有图片变成缩略图 并显示

    要将图片转换为缩略图,我们可以利用Bitmap类的Clone方法和Graphics类的DrawImage方法。首先,创建一个与原图片相同宽度和高度的新Bitmap对象,然后使用Graphics的DrawImage方法,设置适当的源矩形和目标矩形,从而...

    C#查看图片缩略图源码

    在C#编程中,查看图片缩略图是一项常见的任务,特别是在开发图形用户界面(GUI)应用或者处理大量图像文件时。这个源码可能是提供了一种方法来生成和显示图片的预览,即缩略图。下面我们将深入探讨如何在C#中实现这...

    C# 图片裁剪器(使用:Bitmap)

    本教程将详细讲解如何利用C#的Bitmap类创建一个图片裁剪器,允许用户自定义裁剪尺寸和生成缩略图。 首先,我们需要引入必要的命名空间,以便使用Bitmap类和其他相关组件: ```csharp using System.Drawing; using ...

    图片视频缩略图

    - 缩略图大小应根据实际需求调整,避免过大导致内存问题。 - 使用`PurgeableBitmap`或`LruCache`等缓存策略,对缩略图进行缓存,提高加载速度并减少磁盘读写。 - 注意释放不再使用的`Bitmap`资源,防止内存泄漏。...

    上传图片生成缩略图、图片水印、文字水印_aspx开发教程.rar

    在ASP.NET平台中,开发一个能够处理上传图片并生成缩略图、添加图片水印以及文字水印的功能是一项常见的需求。这个"上传图片生成缩略图、图片水印、文字水印_aspx开发教程.rar"文件很可能是包含了一系列的源代码、...

    如何生成图片缩略图

    在ASP.NET中生成图片缩略图是一项常见的任务,特别是在构建网站或应用时,需要对上传的图片进行处理,如创建预览、展示列表或者优化加载速度。本文将深入探讨如何利用ASP.NET技术来实现这一功能。 首先,我们需要...

    图片处理缩略图

    综上所述,实现“图片处理缩略图”功能涉及多个关键步骤和技术,包括鼠标事件处理、双重缓存机制、控件的`Invalidate`和`Paint`事件、以及`Bitmap`、`Image`和`Rectangle`类的使用。通过这些技术的结合,我们可以...

    Android中一个关于图片上传和缩略图查看的Demo

    2. 缩略图的生成可以通过Bitmap.createScaledBitmap方法实现,根据需要的大小比例来裁剪或缩放原图。 3. 考虑到性能优化,通常会先加载较小的缩略图,然后在用户需要时再加载原图,这种策略被称为懒加载。 4. 在...

    基本WPF的缩略图

    这段代码首先读取原始图像,然后创建一个新的Bitmap对象作为缩略图,并使用Graphics对象进行绘制,保持图像质量。 接着,将生成的缩略图转换为WPF可以识别的BitmapSource类型: ```csharp using System.Windows....

    pdf生成缩略图

    - 示例代码中未直接提供生成PDF缩略图的方法,但提到了一个生成图片缩略图的简单方法,通过调整Bitmap对象的尺寸来创建缩略图。 8. **性能优化**: - 为了提高效率,生成缩略图时通常会调整原始图像的大小,减少...

Global site tag (gtag.js) - Google Analytics