2013-03-02 2 views
11

Мое приложение должно отображать большое количество изображений с высоким разрешением (около 1900 * 2200 px), поддержка масштабирования. Чтобы избежать Из ошибки памяти я планирую декодировать изображение, чтобы показать полный экран с помощьюAndroid pinch увеличить большое изображение, эффективная память без потери детализации

options.inSampleSize = scale (scale was calculated as Power of 2 as Document) 

(На мой взгляд, я использовал это TouchImageView простирается от ImageView)

Так я могу быстро загружать изображения и проведите плавно между экранами (изображений). Однако, когда я зажимаю зум, мое приложение теряет детали из-за масштабированного изображения. Если я загружаю полное изображение, я не могу быстро загрузить или плавно перетащить, перетащить после увеличения зума. Затем я пытаюсь загрузить только полное изображение, когда пользователь начинает рисовать, но я все еще не могу перетащить плавно изображение из-за очень большого изображения. Галерея Android может сделать это идеально даже 8Mpx изображений.

Любой может мне помочь. Заранее спасибо

+0

Может быть, это то, что вы ищете http://stackoverflow.com/questions/12022675/decode-part-of-jpeg-file – exebook

+0

я глубоко не понимаю, но, возможно, это не полезно для меня – Kiradev

+0

(как будто) единственный способ показать огромные скорости Jpegs - это постепенно загружать их и декодировать только нужные части. Общим способом доступа к jpeg является libjpeg, поэтому в приведенной выше ссылке обсуждается, как использовать libjpeg для постепенного получения частей файла jpeg без его декодирования в целом. – exebook

ответ

3

Я знаю, что вопрос был задан давно, но этот ответ может помочь другим людям, борющимся с этим. У меня была точно такая же проблема. Вы должны рассмотреть возможность использования WebView и загрузить изображение с ним, даже если это локальное изображение. Например, чтобы загрузить изображение в активов использовать следующее:

// Get a WebView you have defined in your XML layout  
WebView webView = (WebView) findViewById(R.id.webView1); 
// Fetch the picture in your folders using HTML    
String htmlData = "<img src=\"my_image.png\">"; 
webView.loadDataWithBaseURL("file:///android_asset/", htmlData, "text/html", "utf-8", null); 
// Activate zooming 
webView.getSettings().setBuiltInZoomControls(true); 

Я признаю, что это очень странно использовать WebView для такой задачи, это единственное решение, которое я нашел. По крайней мере, вы никогда не получите исключение OOM.

8

Извините, что ответили на старый вопрос, но я только что закончил изображение, которое отображает изображение из активов или внешнего хранилища с подвыборкой, и загружает плитки с более высоким разрешением из изображения при увеличении изображения. данные изображения для областей экрана не загружаются, он должен избегать исключений из памяти.

https://github.com/davemorrissey/subsampling-scale-image-view

+0

Я только что использовал вашу библиотеку и просмотрел ее исходный код. Вы должны получить Нобелевскую премию! –

+0

работает на маленьких экранах (320x480), но падает на большие (1280x800) :(Мне действительно нужно решение для загрузки большого изображения с масштабированием и панорамированием. Sigh ... – usman

+0

@usman Поскольку я написал это, я сделал некоторые изменения, чтобы исправить некоторые случаи кросс, в которых еще может быть брошен OOME. Несколько пользователей сообщили, что используют представление для отображения изображений размером до 20 000 x 20 000 на любом устройстве. –

Смежные вопросы