在Android中裁剪和调整图片大小

12 浏览
0 Comments

在Android中裁剪和调整图片大小

我按照下面的指示来裁剪一张图片。\nhttp://coderzheaven.com/index.php/2011/03/crop-an-image-in-android/\n最终裁剪后的位图图像的高度和宽度都大于屏幕的尺寸。\n在调整大小和裁剪的过程中,出现了内存不足的错误,导致应用程序被强制退出。\n错误日志:\n

04-09 11:37:28.658: ERROR/dalvikvm-heap(4003): 435176字节的外部分配对于此进程过大。
04-09 11:37:28.658: ERROR/GraphicsJNI(4003): 虚拟机不允许我们分配435176字节。
04-09 11:37:28.668: WARN/dalvikvm(4003): 线程id=1: 线程退出时抛出了未捕获的异常 (group=0x4001d800)。
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): 致命异常: java.lang.OutOfMemoryError: 位图大小超过虚拟机预算。
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at android.graphics.Bitmap.nativeCreate(Native Method)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at android.graphics.Bitmap.createBitmap(Bitmap.java:468)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at android.graphics.Bitmap.createBitmap(Bitmap.java:435)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at com.test.Test.onCreate(Test.java:57)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at android.os.Handler.dispatchMessage(Handler.java:99)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at android.os.Looper.loop(Looper.java:123)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at android.app.ActivityThread.main(ActivityThread.java:4627)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at java.lang.reflect.Method.invokeNative(Native Method)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at java.lang.reflect.Method.invoke(Method.java:521)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-09 11:37:28.708: ERROR/AndroidRuntime(4003): at dalvik.system.NativeStart.main(Native Method)

\n有人知道如何解决这个问题吗?\n谢谢。\n======\n更新:我解决了这个问题。

0
0 Comments

在这个例子中,开发者正在将他的应用程序资源文件夹中的图像进行裁剪(起始可能相对较小),裁剪为一个300x300的位图图像。首先,尝试在您自己的应用程序中裁剪一个较小尺寸的图像,裁剪到一个较小的输出尺寸,以查看代码是否有问题,或者您是否正在使用对于您的代码或设备来说太大的图像。

由于您说最终您要裁剪的图像比屏幕要大,这可能是问题所在,您正在遇到Android中使用位图的基本挑战。位图文件大小是像素宽度乘以高度的函数-它们增长得很快。

您可以通过搜索日志中的其他部分,例如“bitmap size exceeds VM budget”,您将找到一些在stackoverflow上的帖子,如这个问题。

您可以通过使用位图选项和inSampleSize以及其他技术来解决这个问题。

解决方法:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2; // 设置缩放比例为2
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image, options);

这些技术可以帮助您减小位图的大小,以避免内存溢出错误。

0
0 Comments

Android中的图像裁剪和调整大小问题的解决方法是使用ThumbnailUtils类。这个类提供了一个方法extractThumbnail(Bitmap, int, int),可以用来裁剪和调整图片的大小。

原因:开发人员的同事向他介绍了一个Android API,即ThumbnailUtils类,该类可以帮助开发人员进行图像裁剪和调整大小的操作。开发人员之前一直在寻找这样一个功能。

解决方法:使用ThumbnailUtils类的extractThumbnail方法来实现图像的裁剪和调整大小操作。具体的用法可以参考http://developer.android.com/reference/android/media/ThumbnailUtils.html#extractThumbnail(android.graphics.Bitmap

代码示例:

Bitmap thumbnail = ThumbnailUtils.extractThumbnail(bitmap, width, height);

以上就是解决Android中图像裁剪和调整大小问题的方法。通过使用ThumbnailUtils类的extractThumbnail方法,开发人员可以方便地实现图像的裁剪和调整大小操作。

0
0 Comments

问题:在Android中进行图像裁剪和调整大小的原因以及解决方法

在Android开发中,经常会遇到需要对图像进行裁剪和调整大小的需求。这个问题可能出现的原因是为了满足特定的UI设计要求或者优化图像的显示效果。下面给出了一种解决方法:

解决方法:

可以使用以下代码来裁剪图像,并解决你的问题:

Matrix matrix = new Matrix();
matrix.postScale(0.5f, 0.5f);
Bitmap croppedBitmap = Bitmap.createBitmap(bitmapOriginal, 100, 100,100, 100, matrix, true);

上述代码在裁剪之前进行了图像的缩放,这样可以在获取裁剪图像时得到最佳结果,并避免出现OOM(Out of Memory)错误。如果需要更多的细节,可以参考这篇博客文章

此外,还有一个简单可靠的解决方案,可以参考stackoverflow.com/a/17733530/294884

0