我只想从我的应用程序打开 native 相机应用程序来拍摄照片并将其设置为屏幕的背景图像,然后在单击按钮时旋转它。如果使用 3MP 相机拍摄,照片将旋转 n 次。如果我将相机分辨率设置为 5MP 或更高,则应用会在第 5 次单击按钮时强制关闭(照片旋转 4 次)。
Bitmap rotatedBitmap = null;
int curAngle = 0;
private Bitmap rotateImageBitmap(Bitmap capturedPhotoBitmap) {
if(rotatedBitmap != null )
{
rotatedBitmap = null;
}
Matrix matrix = new Matrix();
curAngle = (curAngle + 90) % 360;
matrix.postRotate(curAngle);
rotatedBitmap = Bitmap.createBitmap(capturedPhotoBitmap, 0, 0, capturedPhotoBitmap.getWidth(), capturedPhotoBitmap.getHeight(), matrix, true);
return rotatedBitmap;
}
这是来自开发者指南....
1. 移动设备通常具有受限的系统资源。 Android 设备可以为单个应用程序提供低至 16MB 的可用内存。
2。 位图占用大量内存,尤其是对于照片等丰富的图像。例如,Galaxy Nexus 上的相机可拍摄高达 2592x1936 像素(5 百万像素)的照片。如果使用的位图配置是 ARGB_8888(从 Android 2.3 开始的默认设置),那么将此图像加载到内存中需要大约 19MB 的内存(259219364 字节),立即耗尽某些应用程序的限制设备。
现在大多数手机都配备 8mp 或更高的摄像头。所以图片会很大。 如何在不影响相机分辨率的情况下将照片旋转“n”次。我需要压缩它吗?什么是最好的方法?
最佳答案
我不会将图像放在 RAM 的堆上,而是将图像加载(读取:缓冲)到应用缓存目录中的磁盘上。 http://developer.android.com/reference/android/content/Context.html#getCacheDir()
图像在磁盘上后,我会使用样本大小将其膨胀到内存中以减少内存消耗。
参见 http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize和 http://developer.android.com/reference/android/graphics/BitmapFactory.html
您选择的样本大小与位图的大小(以像素为单位)和您要将图像加载到的 View 的大小(以像素为单位)有关。
要查找图像的尺寸,请使用 BitmapFactory.Options 对象中的“inJustDecodeBounds”选项。
请记住,您选择的样本大小应为 2 的幂。数字越大,节省的内存越多,但图像质量越低。
样本大小 2 = 大小的 1/4。样本量 4 = 1/16 大小等
关于android - 处理大位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11183210/