Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
加载到内存前检查Android图像大小_Android - Fatal编程技术网

加载到内存前检查Android图像大小

加载到内存前检查Android图像大小,android,Android,我创建了一个小应用程序,可以处理来自画廊或照相机的图像 这一切都很好,但是。 在小屏幕和小内存(HTC Desire)的设备上,我从其他手机下载了一些全尺寸的图像,它们要大得多(手机上有8MP摄像头) 如果我尝试加载它,对于我的小型相机的巨大图像,它会立即崩溃 那么,如何执行某种检查并缩小该图像,但仍然正确加载它 我确实会在加载图像后缩小它们,但这是在崩溃出现之前应该做的事情 Tnx 您可以避免仅通过设置在内存中加载位图 inJustDecodeBounds = true 将允许您仅解码图像的

我创建了一个小应用程序,可以处理来自画廊或照相机的图像

这一切都很好,但是。 在小屏幕和小内存(HTC Desire)的设备上,我从其他手机下载了一些全尺寸的图像,它们要大得多(手机上有8MP摄像头)

如果我尝试加载它,对于我的小型相机的巨大图像,它会立即崩溃

那么,如何执行某种检查并缩小该图像,但仍然正确加载它

我确实会在加载图像后缩小它们,但这是在崩溃出现之前应该做的事情

Tnx


您可以避免仅通过设置在内存中加载位图

inJustDecodeBounds = true
将允许您仅解码图像的边界,而不解码它。给定位图的
高度
宽度
,可以使用

当文件停留时:

如果设置为大于1的值,则请求解码器对原始数据进行二次采样 图像,返回较小的图像以节省内存

int-tmpWidth=位图宽度;
int tmpHeight=位图高度;
int requiredSize=。。。
while(true){
如果(tmpWidth/2<所需尺寸
||t灯光/2<所需尺寸)
打破
tmpWidth/=2;
tmpHeight/=2;
比率*=2;
}

编辑:对于32位
位图
所需的内存为
宽度*高度*4

您可以避免在内存中加载位图,只需设置

inJustDecodeBounds = true
将允许您仅解码图像的边界,而不解码它。给定位图的
高度
宽度
,可以使用

当文件停留时:

如果设置为大于1的值,则请求解码器对原始数据进行二次采样 图像,返回较小的图像以节省内存

int-tmpWidth=位图宽度;
int tmpHeight=位图高度;
int requiredSize=。。。
while(true){
如果(tmpWidth/2<所需尺寸
||t灯光/2<所需尺寸)
打破
tmpWidth/=2;
tmpHeight/=2;
比率*=2;
}

编辑:对于32位
位图
所需的内存是
宽度*高度*4

我必须承认,我没有得到你的答案。我会用代码编辑我的问题,所以我试着把它放在任何屏幕上,阅读屏幕大小,可能还有屏幕密度,但还是太大了。我一定是遗漏了一些关于比率/密度的信息。我认为它太大了(800或480)。尝试设置inSampleSize=8我遇到了一个奇怪的情况,如果我尝试手动设置,SampleSize 3会使我的图像比我想要的大两倍,SampleSize 4会使图像变小……这不可能是真的。如果将inSampleSize设置为3,则结果图像必须是原始图像宽度/高度的1/3。我无法得到您的答案。我会用代码编辑我的问题,所以我试着把它放在任何屏幕上,阅读屏幕大小,可能还有屏幕密度,但还是太大了。我一定是遗漏了一些关于比率/密度的信息。我认为它太大了(800或480)。尝试设置inSampleSize=8我遇到了一个奇怪的情况,如果我尝试手动设置,SampleSize 3会使我的图像比我想要的大两倍,SampleSize 4会使图像变小……这不可能是真的。如果将inSampleSize设置为3,则结果图像的宽度/高度必须为原始图像的1/3
int tmpWidth = bitmapWidth;
int tmpHeight = bitmapHeigth;
int requiredSize = ...
while (true) {
 if (tmpWidth / 2 < requiredSize
    || tmpHeight / 2 < requiredSize)
        break;
    tmpWidth /= 2;
    tmpHeight /= 2;
    ratio *= 2;
 }