يفشل وحدة فك ترميز Skia في فك تشفير الدفق البعيد

StackOverflow https://stackoverflow.com/questions/2787015

  •  03-10-2019
  •  | 
  •  

سؤال

أحاول فتح دفق بعيد لصورة JPEG وتحويله إلى كائن نقطية:

    BitmapFactory.decodeStream(
new URL("http://some.url.to/source/image.jpg")
.openStream());

يعيد وحدة فك الترميز خالية وفي السجلات أحصل على الرسالة التالية:

DEBUG/skia(xxxx): --- decoder->decode returned false

ملحوظة:
1. طول المحتوى غير صفري ونوع المحتوى image/jpeg
2. عندما أفتح عنوان URL في المتصفح ، يمكنني رؤية الصورة.

ما الذي أفتقده هنا؟

الرجاء المساعدة. شكرًا.

هل كانت مفيدة؟

المحلول 2

يبدو أن هناك بعض المشكلات في الدفق والطريقة التي تعامل بها Android. التصحيح في هذا تقرير الشوائب حل المشكلة في الوقت الحالي.

نصائح أخرى

الحل المقدم في Android Bug N ° 6066 تتكون في تجاوز FilterInputStream Std ثم أرسلها إلى BitmapFactory.

static class FlushedInputStream extends FilterInputStream {
    public FlushedInputStream(InputStream inputStream) {
    super(inputStream);
    }

    @Override
    public long skip(long n) throws IOException {
        long totalBytesSkipped = 0L;
        while (totalBytesSkipped < n) {
            long bytesSkipped = in.skip(n - totalBytesSkipped);
            if (bytesSkipped == 0L) {
                  int byteValue = read();
                  if (byteValue < 0) {
                      break;  // we reached EOF
                  } else {
                      bytesSkipped = 1; // we read one byte
                  }
           }
           totalBytesSkipped += bytesSkipped;
        }
        return totalBytesSkipped;
    }
}

ثم استخدم وظيفة decodestream:

Bitmap bitmap = BitmapFactory.decodeStream(new FlushedInputStream(inputStream));

الحل الآخر الذي وجدته هو ببساطة إعطاء bufferedInputStream إلى th bitmapfactory:

Bitmap bitmap = BitmapFactory.decodeStream(new BufferedInputStream(inputStream));

يجب أن يقوم هذان الحلان بالخدعة.

يمكن العثور على مزيد من المعلومات في تعليقات تقرير الأخطاء: Android Bug No.6066

بالنسبة لي المشكلة هي نوع لون الصورة: صورتك على اللون = cymk ليس في RGB

لقد وجدت مكتبة ، يمكنها فتح الصور التي تفشل فيها Android Skia. يمكن أن يكون مفيدًا لبعض الأوعية الدموية:

https://github.com/suckgamony/rapidDecoder

بالنسبة لي ، فقد حل المشكلة لأنني لا أقوم بتحميل العديد من الصور في وقت واحد ، والكثير من الصور التي أقوم بتحميلها لها ملف تعريف ICC. لم أحاول دمجها مع بعض المكتبات الشائعة مثل Picasso أو Glide.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top