我在一个文件中有一个大位图(比如3888x2592).现在,我想将该位图的大小调整为800x533并将其保存到另一个文件中.我通常会通过调用Bitmap.createBitmap方法来缩放位图,但它需要一个源位图作为第一个参数,我无法提供,因为将原始图像加载到Bitmap对象当然会超出内存(例如,请参见此处).
我也无法读取位图,例如,BitmapFactory.decodeFile(file, options)提供a BitmapFactory.Options.inSampleSize,因为我想将其调整为精确的宽度和高度.使用inSampleSize会将位图的大小调整为972x648(如果我使用inSampleSize=4)或778x518(如果我使用inSampleSize=5,它甚至不是2的幂).
我还想避免使用inSampleSize在第一步中使用例如972x648读取图像,然后在第二步中将其大小调整为800x533,因为与直接调整原始图像大小相比,质量会很差.
总结我的问题:是否有办法读取10MP或更高的大图像文件并将其保存到新的图像文件,调整大小到特定的新宽度和高度,而不会得到OutOfMemory异常?
我也尝试BitmapFactory.decodeFile(file, options)手动将Options.outHeight和Options.outWidth值设置为800和533,但它不起作用.
我正在将一个位图加载到ImageView中,并看到此错误.我收集此限制与OpenGL硬件纹理(2048x2048)的大小限制有关.我需要加载的图像是大约4,000像素高的捏缩图像.
我试过关闭清单中的硬件加速,但没有快乐.
<application
android:hardwareAccelerated="false"
....
>
Run Code Online (Sandbox Code Playgroud)
是否可以将大于2048像素的图像加载到ImageView中?
我有543*6423分辨率的图像,我想在所有设备中显示它.它在很少的Android手机中显示,允许高分辨率.我试过了
android:hardwareAccelerated="false"
Run Code Online (Sandbox Code Playgroud)
这是我的java代码.
File storagePath =Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOWNLOADS+
"abc.png");
InputStream is = this.getContentResolver().openInputStream(Uri.fromFile(storagePath));
Bitmap b = BitmapFactory.decodeStream(is, null, null);
is.close();
image.setImageBitmap(b);
Run Code Online (Sandbox Code Playgroud)
这适用于我的手机(索尼xperia),但很少有其他手机没有显示它.请帮助我如何显示此图像独立于屏幕分辨率.
谢谢,阿曼