Вопрос по android – Android: bitmapfactory.decodestream возвращает ноль

6

Я попытался получить растровое изображение из пути к изображению. НоBitmapFactory.decodeStream возвращаетсяnull значение.

Код:

URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
connection.disconnect();
input.close();

Я искал на других сайтах, но я так и не получил решение.

есть ошибка BitmapFactory.decodeStream (). Вместо decodeStream попробуйте сохранить изображение, например, на SD, а затем загрузить его через BitmpaFoctory или прочитать это:android-developers.blogspot.it/2010/07/… Blackbelt
Вы уверены, что URL-адрес указывает на то, что BitmapFacotry может декодировать? Blackbelt
да, URL:static.adzerk.net/Advertisers/… Ponmalar

Ваш Ответ

5   ответов
0

но в моем случае проблема заключалась в ресурсе (изображении). Убедитесь, что изображение не в цветном режиме CMYK, поскольку Android не поддерживает изображения CMYK. Увидетьэтот вопрос Больше подробностей

Удачи ;)

1
public Bitmap getBitmapFromUrl(String url)
{
Bitmap bm = null;
InputStream is = null;
BufferedInputStream bis = null;
try 
{
    URLConnection conn = new URL(url).openConnection();
    conn.connect();
    is = conn.getInputStream();
    bis = new BufferedInputStream(is, 8192);
    bm = BitmapFactory.decodeStream(bis);
}
catch (Exception e) 
{
    e.printStackTrace();
}
finally {
    if (bis != null) 
    {
        try 
        {
            bis.close();
        }
        catch (IOException e) 
        {
            e.printStackTrace();
        }
    }
    if (is != null) 
    {
        try 
        {
            is.close();
        }
        catch (IOException e) 
        {
            e.printStackTrace();
        }
    }
}
return bm;
}

Error: User Rate Limit Exceeded Ponmalar
0

String IMAGE_URL = "http://www.kolkatabirds.com/rainquail8vt.jpg";
            //where we want to download it from
            URL url;
            try {
                url = new URL(IMAGE_URL);

                //open the connection
                URLConnection ucon = url.openConnection();

                //buffer the download
                InputStream is = ucon.getInputStream();
                BufferedInputStream bis = new BufferedInputStream(is,1024);

                //get the bytes one by one
                int current = 0;

                while ((current = bis.read()) != -1) {
                    baf.append((byte) current);
                }
                //convert it back to an image
                ByteArrayInputStream imageStream = new ByteArrayInputStream(baf.toByteArray());
                Bitmap theImage = BitmapFactory.decodeStream(imageStream);
                img.setImageBitmap(theImage);
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Ponmalar
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Ponmalar
14

Got a Solution :-)

HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = (HttpResponse) httpclient.execute(httpRequest);
HttpEntity entity = response.getEntity();
BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);
bmp = BitmapFactory.decodeStream(bufHttpEntity.getContent());
httpRequest.abort();

Проблема заключалась в том, что после того, как вы использовали InputStream из HttpUrlConnection, вы не можете перематывать и снова использовать тот же InputStream снова. Поэтому вы должны создать новый InputStream для фактической выборки изображения. В противном случае мы должны прервать http-запрос.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Ponmalar
0

BufferedInputStream is necessary before decodestream....

Попробуйте это, это прекрасно работает для меня;

BufferedInputStream buf = new BufferedInputStream(inputsteam, 1024);

Передача buf для декодирования потока будет работать отлично.

Bitmap theImage = BitmapFactory.decodeStream(buf);

Наконец, установите ваше растровое изображение.

Похожие вопросы