这可能听起来像一个奇怪/愚蠢的问题。但是听我说。
Android应用程序,至少在T-Mobile G1上,限制为16 堆的MB 。
每个像素需要4个字节来存储图像(以位图形式):
public void onPictureTaken(byte[] _data, Camera _camera) {
Bitmap temp = BitmapFactory.decodeByteArray(_data, 0, _data.length);
}
所以1张图片,600万像素占用24MB的堆。 ( Cue Memory overflow )。
现在我非常清楚使用参数解码的能力,以有效地减小图像的大小。我甚至有一种方法可以将其缩小到所需的大小。
但是在我希望将相机用作高质量相机的情况下呢?
我不知道如何将此图像放入数据库。我一解码就错了。
注意:我需要(?)将其转换为Bitmap,以便在存储之前将其旋转。
总结一下:
这并没有解决问题,但我推荐它作为其他人只是从一个位置加载图像的起点: Displaying Bitmaps on android
答案 0 :(得分:3)
我只能想到一些可能有帮助的事情,其中没有一个是最佳的
您的轮换服务器端
将捕获的数据直接存储到SDCARD而不对其进行解码,然后使用文件系统将其按块旋转,然后将其发送到数据库。网上有很多例子(如果你的角度很简单,90 180等)虽然这很费时间,因为针对SDCARD的IO操作并不是很快。
当您解码掉alpha通道时,这可能无法解决您的问题,如果您使用矩阵旋转图像,那么无论如何您都需要目标/来源
选项opt = new Options();
opt.inPreferredConfig = Bitmap.Config.RGB_565;
//将原始相机解码为没有alpha通道的位图 bmp = BitmapFactory.decodeByteArray(raw,0,raw.length,opt);
可能有更好的方法可以做到这一点,但由于您的设备在堆等方面非常有限,我无法想到。
如果有一个基于可选文件的矩阵方法(通常是我建议的选项2)或某种"分页"那将是很好的。适用于Android的系统,但这是我能想到的最好的。
答案 1 :(得分:0)
首先将其保存到文件系统,使用文件系统中的文件进行操作......