我正在将一个位图加载到一个ImageView中,并且看到了这个错误。我猜这个限制与OpenGL硬件纹理的大小限制(2048x2048)有关。我需要加载的图像是一个大约4000像素高的收缩缩放图像。
我试过在清单中关闭硬件加速,但没有效果。
<application
android:hardwareAccelerated="false"
....
>
是否可以将大于2048像素的图像加载到ImageView中?
发布于 2012-04-23 03:02:27
所有的渲染都是基于OpenGL的,所以你不能超过这个限制(GL_MAX_TEXTURE_SIZE
取决于设备,但最小值是2048x2048,所以任何小于2048x2048的图像都可以)。
有了这么大的图片,如果你想放大缩小,在手机上,你应该设置一个类似于谷歌地图的系统。图像被分成几个部分,并有几个定义。
或者,您可以在显示图像之前缩小图像(有关此问题,请参阅user1352407's answer )。
另外,要注意你把图片放到哪个文件夹里,Android可以自动放大图片。看看下面关于这个问题的Pilot_51's answer。
发布于 2013-02-14 22:57:57
这不是对这个问题的直接回答(加载图像>2048),但对于遇到错误的任何人来说,这是一个可能的解决方案。
在我的例子中,图像在两个维度上都小于2048 (准确地说是1280x727),这个问题在Galaxy Nexus上特别出现。图像位于drawable
文件夹中,但没有任何合格的文件夹。Android假设没有密度限定符的可绘制图形是mdpi,并根据其他密度放大或缩小它们,在本例中为xhdpi放大了2倍。将罪魁祸首图像移动到drawable-nodpi
以防止缩放解决了问题。
发布于 2013-03-28 01:57:56
我以这种方式缩小了图像:
ImageView iv = (ImageView)waypointListView.findViewById(R.id.waypoint_picker_photo);
Bitmap d = new BitmapDrawable(ctx.getResources() , w.photo.getAbsolutePath()).getBitmap();
int nh = (int) ( d.getHeight() * (512.0 / d.getWidth()) );
Bitmap scaled = Bitmap.createScaledBitmap(d, 512, nh, true);
iv.setImageBitmap(scaled);
https://stackoverflow.com/questions/10271020
复制相似问题