android解码资源返回null的xml位图- API级别7



我有一个奇怪的情况:在将我的png从/drawable-hdpi/移动到/drawable/并将XML位图放到/drawable-hdpi/之后,我无法用BitmapFactory.decodeResource()方法解码这些位图-它返回null。更奇怪的是:

  1. 我可以解码实际的png文件与此方法(给出实际可绘制的id)
  2. 我可以使用context.getResources().getDrawable(xml_id) -
  3. 得到可绘制的
  4. 所有ImageViews组件被正确解码(但这是由于p. 2我想)

我在日志中看到的是:

12-03 16:18:13.557: D/skia(2566):——SkImageDecoder::Factory返回null
12-03 16:18:13.557: D/skia(2566):——SkImageDecoder::Factory返回null
12-03 16:18:13.567: D/skia(2566):——SkImageDecoder::Factory returned null

所以我会大胆猜测解码器是给出xml文件来解码,而不是实际的资源(我检查是有效的)。

提示吗?是否有可能BitmapFactory.decodeResource()与xml位图?顺便说一句,我正在使用API 7。

我也试过把原来的图形放到draw_nodpi中,但是也没有帮助。由于

获取可绘制图像,然后转换为位图:

Drawable drawable = getResources().getDrawable(resId);
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();

现在你可以使用Bitmap对象了

XML位图是用XML定义的指向位图文件的资源。该效果是原始位图文件的别名。XML可以为位图指定额外的属性,如抖动和平铺。

http://developer.android.com/guide/topics/resources/drawable-resource.html

我有同样的问题,但我用这个作为一个解决方案。不幸的是,当你解码流时,我看不到任何方法来传递选项。

            //init input stream
    is = getContext().getResources().openRawResource(resID);
    Bitmap returnBitmap;
    //Load bitmap directly - will fail if xml
    Bitmap newBmp = BitmapFactory.decodeStream(is, options);
    if(newBmp == null){
        //Load bitmap from drawable auto scales
        newBmp = ((BitmapDrawable) getContext().getResources().getDrawable(resID)).getBitmap();
    }

XML位图到底是什么?bitmapfactory . decoderresource()加载一个位图图像——你应该使用PNG或JPEG图像。

请停止在-hdpi和-nodpi或其他任何随机的东西。对于给定的资源名,所有不同的dpi限定符或诸如此类的东西都提供了同一事物的不同变体。您不应该让其中一些是位图而另一些是XML文件,也没有意义将-nodpi与其他变体混合使用。

当尝试将一个xml位图链接到另一个xml位图时,也会发生此错误

<bitmap
  android:src="@drawable/glow"
  android:tileMode="disabled" android:gravity="center" >
</bitmap> 

其中"glow"是另一个XML位图

最新更新