2016-12-12 5 views
0

У меня большой размер файла изображения размером почти 16 МБ. Я хочу загрузить это изображение в мое изображение и увеличить его после добавления маркеров. Я пробовал это с subampling-scale-image-view. Я следую приведенной ниже ссылке https://github.com/davemorrissey/subsampling-scale-image-view.Android - Загрузка изображения byte by byte в imageview

Важным моментом является загрузка изображения с URL-адреса. Вышеупомянутая библиотека не поддерживает это. Поэтому я просто загрузил изображение и сохранил его на SD-карту после этой загрузки из этого локального файла. Технически это работает.

Выпуск:

Теперь проблема это занимает слишком много времени в первый раз загрузки. Также даже второй раз это занимает почти минуту.

Моей идея:

В связи с этим вопросом, я пытаюсь загрузить байты изображения байта. Как только изображение загружает 100bytes, тогда покажите, что в imageView next загрузите следующую часть изображения с url. Можно ли так поступать?

В настоящее время я загрузки изображения как следующий код:

URL url = new URL(url_); 

       URLConnection conection = url.openConnection(); 
       conection.connect(); 
       // getting file length 
       int lenghtOfFile = conection.getContentLength(); 

       // input stream to read file - with 8k buffer 
       InputStream input = new BufferedInputStream(url.openStream(), 8192); 

       // Output stream to write file 

       OutputStream output = new FileOutputStream(root+"/"+ fileName); 
       byte data[] = new byte[1024]; 

       long total = 0; 
       while ((count = input.read(data)) != -1) { 
        total += count; 

        // writing data to file 
        output.write(data, 0, count); 

       } 

       // flushing output 
       output.flush(); 

       // closing streams 
       output.close(); 
       input.close(); 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         image.setImage(ImageSource.uri(root+"/"+ fileName)); 
        } 
       }); 

Может кто-нибудь помочь мне решить эту загадку?

Примечание:Если есть какая-либо другая, чем это библиотека PLS возможности добавить ваши предложения.

+0

Это исходит из API? i означает изображения – Vadivel

+0

Да это из API – Amsheer

+0

Задать вопрос разработчику php для преобразования изображения в формат timthumb или mthumb – Vadivel

ответ

0

Никогда не пробовал это, но вы можете проверить, не работает ли это.

Получить данные с URL-адреса в виде массива байтов.

data = getImageStream(url); //should call in async Task.. 

Теперь преобразовать массив байтов в растровое изображение и установить в изображенииView.

Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); 
image.setImageBitmap(bitmap) 

Не записывать в файл. Это поможет с некоторым улучшением производительности.

public byte[] getImageStream(String url){  
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
InputStream is = null; 
try { 
    is = url.openStream(); 
    byte[] byteChunk = new byte[4096]; // Or whatever size you want to read in at a time. 
    int n; 

    while ((n = is.read(byteChunk)) > 0) { 
    baos.write(byteChunk, 0, n); 
    } 
} 
catch (IOException e) { 
    System.err.printf ("Failed while reading bytes from %s: %s", url.toExternalForm(), e.getMessage()); 
    e.printStackTrace(); 
    // Perform any other exception handling that's appropriate. 
} 
finally { 
    if (is != null) { is.close(); } 
} 
return baos.toByteArray(); 
} 
+0

В чем разница между моим кодом и вашим? – Amsheer