Raf*_*l T 29 memory png android image view
我打算在Android中显示非常大的图像.
我的第一个解决方案 - 以pdf格式提供它们 - 失败了,因为并非所有掌上电脑都预装了pdf-viewer,我不想要求用户安装一个.
所以我现在要显示一个png (宽度= 3998px高度= 2827px).我下载了这张图片来测试它将如何显示在图库中.这真是太痛苦了.似乎galery只渲染了这张照片一次,如果我放大,我根本无法读取文字.
所以我写了一个testActivity,它只是一个嵌套在LinearLayout中的ImageView.我将图像放入drawable并将其设置为ImageView的图像源.不幸的是,应用程序立即崩溃,因为"
ERROR/AndroidRuntime(8906): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget"
Run Code Online (Sandbox Code Playgroud)
我没想到一张图片可能太大了VM's memory.我玩了一下,设置ImageViews尺寸3998 & 2827px,把图像放到sdCard手动读取它fileInputStream.
令我惊讶的是,它现在显示了我的图像,但如果我将Nexus S水平转动,我会OutOfMemoryError像以前一样.
有人能指出通过a接收位图FileInputStream或将其设置为ImageView's源之间的主要区别.
此外,我无法滚动舒适的双亲,scrollViews
我搜索一个简单的解决方案,一次显示ONE large image,scroll horizontal and vertical同时能够放大和缩小.
这是我想要显示的图像的示例

lea*_*eep 29
我知道这是一个老帖子,但我花了很多时间来解决这个问题,所以这是我的解决方案.
我想要显示一张2000×3000的图片,但是内存不足或者图像太大而无法显示.
首先,我得到图片的尺寸:
o = new BitmapFactory.Options();
o.inJustDecodeBounds=true;
pictures = BitmapFactory.decodeStream(new FileInputStream(f), null, o);
Run Code Online (Sandbox Code Playgroud)
然后我将其分为四个部分,并用四个ImageView显示它们.我试图加载完整的图片并将其切成四个(使用BitmapFactory.create(bitmap,int,int,int,int))但再次失去记忆.
所以我决定使用一些BitMapRegionDecoder:
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
ImageView iv = new ImageView(this);
InputStream istream = null;
try {
istream = this.getContentResolver().openInputStream(Uri.fromFile(f));
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
BitmapRegionDecoder decoder = null;
try {
decoder = BitmapRegionDecoder.newInstance(istream, false);
} catch (IOException e) {
e.printStackTrace();
}
int nw = (j*width/k);
int nh = (i*height/k);
Bitmap bMap = decoder.decodeRegion(new Rect(nw,nh, (nw+width/k),(nh+height/k)), null);
iv.setImageBitmap(bMap);
}
}
Run Code Online (Sandbox Code Playgroud)
这很有效.
小智 7
尝试使用这个:https: //github.com/davemorrissey/subsampling-scale-image-view
适用于Android的自定义图像视图,专为照片库而设计,无需OutOfMemoryErrors即可显示巨大的图像(例如地图和建筑平面图).包括缩放,平移,旋转和动画支持,并允许轻松扩展,以便您可以添加自己的叠加和触摸事件检测.
| 归档时间: |
|
| 查看次数: |
33499 次 |
| 最近记录: |