2011-12-03 22 views
9

Tôi có một tình huống tò mò: sau khi di chuyển PNG của tôi từ/drawable-hdpi/to/drawable/và đưa bitmap XML vào/drawable-hdpi/thay vào đó, tôi không thể giải mã các bitmap này bằng phương thức BitmapFactory.decodeResource() - nó trả về null. lạ là gì là:android decodeResource trả về null cho bitmap xml - API cấp 7

  1. tôi có thể giải mã thực tế file png với phương pháp này (cho id drawable thực tế)
  2. Tôi có thể lấy drawable sử dụng context.getResources().getDrawable(xml_id)-
  3. Tất cả ImageViews thành phần được giải mã một cách chính xác (. nhưng thats do p 2 tôi giả sử)

những gì tôi nhìn thấy trong logcat là:

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

vì vậy tôi sẽ tự nhiên đoán rằng bộ giải mã được cung cấp tệp xml để giải mã thay vì tài nguyên thực tế (mà tôi đã kiểm tra là hợp lệ).

Bất kỳ gợi ý? Có thể BitmapFactory.decodeResource() với bitmap xml không? Btw, tôi đang sử dụng API 7.

Và tôi cũng đã cố gắng đưa ligng vào origina thành drawable-nodpi nhưng điều đó cũng không giúp được gì. thanks

Trả lời

-1

Thế giới là một bitmap XML? BitmapFactory.decodeResource() tải một hình ảnh bitmap - bạn nên sử dụng một hình ảnh PNG hoặc JPEG với nó, không có gì khác.

Và vui lòng ngừng ném các nội dung ngẫu nhiên vào -dpi và -nodpi hoặc bất kỳ thứ gì. Đối với một tên tài nguyên nhất định, tất cả các vòng loại dpi khác nhau hoặc không cung cấp các biến thể khác nhau trên cùng một điều. Bạn không nên có một số trong số đó là bitmap và một số tệp XML, cũng không có ý nghĩa khi trộn -nodpi với các biến thể khác.

+2

tốt, có thể tôi đã sử dụng cụm từ không đúng, ý nghĩa của ** ID tài nguyên bí danh trong XML ** xem: [link] http://developer.android.com/guide/topics/resources/drawable- resource.html # Bitmap. –

+1

ok Tôi nhận được nó, decodeResource() không có logic kiểm tra xem tài nguyên là PNG hay một bí danh, nó chỉ giải mã, đáng tiếc. –

1

Một bitmap XML là tài nguyên được xác định trong XML trỏ đến tệp bitmap. Hiệu ứng là bí danh cho tệp bitmap thô. XML có thể chỉ định các thuộc tính bổ sung cho bitmap như dither và tiling.

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

Tôi gặp cùng một vấn đề nhưng tôi sử dụng điều này như một cách giải quyết khác. Không may với phương pháp này, tôi không thấy bất kỳ cách nào để chuyển Tùy chọn khi bạn giải mã luồng.

  //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(); 
    } 
8

Lấy drawable và sau đó chuyển sang Bitmap:

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

Bây giờ bạn có thể sử dụng đối tượng Bitmap.

+0

Điều này giải quyết được vấn đề này cho tôi! –

+2

Tôi gặp lỗi: 'android.graphics.drawable.StateListDrawable không thể truyền sang android.graphics.drawable.BitmapDrawable' –

+0

' getDrawable (resId) 'đã không được chấp nhận. Sử dụng 'ContextCompat.getDrawable (context, resId)' thay thế. – Jeffrey

0

Lỗi này cũng accures khi cố gắng liên kết một bitmap xml khác bitmap xml như thế này

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

nơi "ánh sáng" là một bitmap xml.

Các vấn đề liên quan