在Android中裁剪和调整图片大小
在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更新:我解决了这个问题。
在这个例子中,开发者正在将他的应用程序资源文件夹中的图像进行裁剪(起始可能相对较小),裁剪为一个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);
这些技术可以帮助您减小位图的大小,以避免内存溢出错误。
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方法,开发人员可以方便地实现图像的裁剪和调整大小操作。
问题:在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。