首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >“位图太大,无法上载到纹理中”

“位图太大,无法上载到纹理中”
EN

Stack Overflow用户
提问于 2012-04-23 02:53:33
回答 13查看 112.3K关注 0票数 157

我正在将一个位图加载到一个ImageView中,并且看到了这个错误。我猜这个限制与OpenGL硬件纹理的大小限制(2048x2048)有关。我需要加载的图像是一个大约4000像素高的收缩缩放图像。

我试过在清单中关闭硬件加速,但没有效果。

代码语言:javascript
复制
    <application
        android:hardwareAccelerated="false"
        ....
        >

是否可以将大于2048像素的图像加载到ImageView中?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2012-04-23 03:02:27

所有的渲染都是基于OpenGL的,所以你不能超过这个限制(GL_MAX_TEXTURE_SIZE取决于设备,但最小值是2048x2048,所以任何小于2048x2048的图像都可以)。

有了这么大的图片,如果你想放大缩小,在手机上,你应该设置一个类似于谷歌地图的系统。图像被分成几个部分,并有几个定义。

或者,您可以在显示图像之前缩小图像(有关此问题,请参阅user1352407's answer )。

另外,要注意你把图片放到哪个文件夹里,Android可以自动放大图片。看看下面关于这个问题的Pilot_51's answer

票数 51
EN

Stack Overflow用户

发布于 2013-02-14 22:57:57

这不是对这个问题的直接回答(加载图像>2048),但对于遇到错误的任何人来说,这是一个可能的解决方案。

在我的例子中,图像在两个维度上都小于2048 (准确地说是1280x727),这个问题在Galaxy Nexus上特别出现。图像位于drawable文件夹中,但没有任何合格的文件夹。Android假设没有密度限定符的可绘制图形是mdpi,并根据其他密度放大或缩小它们,在本例中为xhdpi放大了2倍。将罪魁祸首图像移动到drawable-nodpi以防止缩放解决了问题。

票数 409
EN

Stack Overflow用户

发布于 2013-03-28 01:57:56

我以这种方式缩小了图像:

代码语言:javascript
复制
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);
票数 107
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10271020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档