android - 处理大位图

标签 android bitmap android-camera

我只想从我的应用程序打开 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#inSampleSizehttp://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/

相关文章:

java - 检查文件长度后在 Android 中进行位图采样

java - 如何将位图从服务发送到 java、android 中的主程序?

java - 无法从 Samsung Galaxy S (2.2.1) 上的前置摄像头拍照

android - Camera.Open 不打开相机

java - Android 中未找到 WirelessOnlinePath、未找到 BatteryVoltagePath 和 BatteryTemperaturePath 错误

android - 有没有在 Android Marshmallow 中以编程方式使用模式/密码解锁锁屏?

android - 在不同的 Activity 中绘制位图

Android:在图像捕获期间使用对焦模式 FOCUS_MODE_EDOF

android - FFMPEG 不是 Android 中预期的 “cutting”

android - 让 Google Play Services 4.0.30 与 Android Studio 0.4.2 和 Gradle 0.7 配合使用