2010-05-07 35 views
7

मैं एक JPEG छवि के दूरदराज के एक स्ट्रीम खोलने के लिए और यह एक बिटमैप वस्तु में परिवर्तित करने के लिए कोशिश कर रहा हूँ डिकोड करने में विफल रहता है :Skia डिकोडर दूरस्थ स्ट्रीम

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

नोट:
1. सामग्री की लंबाई गैर-शून्य है और सामग्री प्रकार image/jpeg
2. है जब मैं यूआरएल ब्राउज़र में मैं छवि देख सकते हैं खोलें।

मुझे क्या याद आ रहा है?

कृपया मदद करें। धन्यवाद।

+0

क्या आप इस छवि को प्रदर्शित करने वाली छवि को लिंक प्रदान कर सकते हैं? – CommonsWare

+0

दुर्भाग्य से, मैं नहीं कर सकता। मैं समझता हूं कि आप अप्रत्यक्ष रूप से यहां क्यों संकेत कर रहे हैं ... :) – Samuh

उत्तर

3

लगता है कि धारा के साथ कुछ समस्या थी और जिस तरह से एंड्रॉइड ने इसे संभाला था; इस bug report में पैच अब समस्या हल हो गई है।

10

android bug n°6066 में प्रदान किया गया समाधान std FilterInputStream को ओवरराइड करने में शामिल है और फिर इसे बिटमैप फैक्टरी में भेजता है।

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)); 

अन्य समाधान मैं पाया है BitmapFactory बस एक BufferedInputStream th करने के लिए दे रहा है:

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

इन दो समाधान चाल करना चाहिए।

अधिक जानकारी बग रिपोर्ट टिप्पणी में पाया जा सकता है: android bug no.6066

+2

FWIW FlushedInputStream विधि मेरे लिए काम किया; BufferedInputStream नहीं था। साथ ही, "बाइट" एक आरक्षित कीवर्ड है, इसलिए आपको "int बाइट" को "int byteValue" या कुछ में बदलना चाहिए। – esilver

+0

यह समाधान मेरे लिए काम करता है और मुझे लगता है कि यह सही जवाब होना चाहिए। – KaHeL

+1

यह बग अभी भी तय नहीं है और कामकाज हमेशा काम नहीं करते हैं। – slybloty

0

मेरे लिए समस्या छवि के रंग के प्रकार के साथ है: अपनी छवि रंग में हैं = CYMK आरजीबी

में नहीं
0

मैं एक मिल गया है पुस्तकालय, जो छवियों को खोल सकता है जिस पर एंड्रॉइड एसकेआईए विफल रहता है। यह निश्चित usecases के लिए उपयोगी हो सकता है:

https://github.com/suckgamony/RapidDecoder

मेरे लिए यह रूप में मैं एक बार और छवियों के बहुत से कई छवियों को लोड नहीं कर रहा हूँ मैं लोड आईसीसी प्रोफ़ाइल है समस्या हल हो। मैंने पिकासो या ग्लाइड जैसे कुछ सामान्य पुस्तकालयों के साथ इसे एकीकृत करने की कोशिश नहीं की है।

संबंधित मुद्दे