![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Сириус |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 26.11.2005 Репутация: нет Всего: нет |
Как сделать операцию Zoom для изображений. Такую как к примеру в программах ACDSee.
Моя основная проблема в том, что если взять к примеру маленькую картинку, то ее можно увеличить даже большее количество раз, нежели в ACDSee, а если брать картинку большую, то всего несколько раз и все. То есть гораздо меньше чем в ACDSee. Там количество возможных увеличений не меняется в зависимости от размера картинки. Вот в этом и состоит моя проблема, потаму что при увеличении картинки все равно в конце КОНЦОВ программа прервется тупым OutOfMemoryError-ом, который уже изрядно надоел..как от этого избавится не знаю, ЛСД привел пример как поймать этот error, но все галимо, ничего не ловится. ВОобщем может вообще по иной технологии стоит делать операцию Zoom-а? прошу ваших советов!! На всякий приведу код операции.
|
|||
|
||||
| kkorsakoff |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.10.2005 Где: Санкт-Петербург Репутация: 3 Всего: 14 |
OutOfMemoryError совсем не тупой, а вполне логичен, т.к. при каждом нажатии кнопки zoom ты увеличиваешь размер требуемой памяти в 4 раза. Причем что происходит со старой еще не понятно.
Надо алгоритм менять. Мне кажется надо в памяти хранить только одну копию картинки (на однократном увеличении). При нажатии zooma отрисовывать при помощи этого метода
Тебе надо получить объект Graphics того компонента, на котором отрисовываешь, и вызвать drawImage с нужными параметрами. Сам не использовал, поэтому не знаю реальной скорости работы этого метода, а так же качества зума. Только тогда надо продумать что с прокрутками, не будут ли тормоза. Для наибольшей эффективности конечно надо что-то с кэшированием и предварительной загрузкой делать. Лично я полностью отказался от scale-операций в java. ИМХО, абсолютно неприемлимо. Задачи были типа на сервере превратить около 200 фото примерно 2000x2000 в уменьшенные копии 50x50. Теперь использую только ImageMagik. Справляется с задачей на отлично. Запускать либо через создание процесса либо через jni. Это сообщение отредактировал(а) kkorsakoff - 27.8.2006, 11:43 |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Проблема в том, что ресайз картинки происходит не сразу. Измени код:
и ты будешь ловить OutOfMemoryError. Только вот памяти это тебе не прибавит, учти что например JPEG файл 3000х2000 на диске занимает около 3Мб, а в памяти будет занимать 17.2МБ. Ты наверно что то не правильно делал, скорее всего держал указатель на старое изображение. Лично я писал програмку (даже где-то здесь выкладывал), которая строит превьюшки для файлов в каталоге. Так на каталог с 150 картинками 800х600 она затратила ~10Мб, включая GUI на Swing. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| kkorsakoff |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.10.2005 Где: Санкт-Петербург Репутация: 3 Всего: 14 |
Ну то 800x600, а тут 2000x2000. В 8.333333333 раза больше однако
Ну да ладно память можно и увеличить, это уж от сервера зависит. А скорость работы у тебя какая была? У меня уж очень низкая. Да и вообще выделять такое количество памяти на тривиальнейшую задачу уменьшения картинок по моему мнению не очень адекватно. Добавлю, что как яростный сторонник java, перешел на стороннюю программу не по своему желанию Потребовали пользователи сервиса, предоставив очевидные преемущества по скорости работы. Плюс было несколько вылетов OutOfMemory прямо во время полного отсутствия тех. админов. Хотя это уже на вкус и цвет, давай лучше решать проблему Сириуса |
|||
|
||||
| Сириус |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 26.11.2005 Репутация: нет Всего: нет |
kkorsakoff к сожалению ГРафиксом не выйдет, там куча новых проблем будет, а использовать что-то другое кроме Джавы нельзя..
LSD Вот не ловит Exception in thread "Image Fetcher 3" java.lang.OutOfMemoryError: Java heap space Код изменил
Но никак... |
|||
|
||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Ну я уж не знаю как ты это делаешь.
Вот мой пример:
картинка 1280x1024 24BPP. В консоли получаю следующее:
(красным выделено то, что пишется в System.err) -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
| skhilkov |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 371 Регистрация: 11.4.2006 Где: TOMSK Репутация: 2 Всего: 7 |
У меня тоже эта проблема была, не мог поймать эту вещь и все тут... Раньше я предполагал, что может быть эта ошибка обрабатывается внутри вышеуказанных функций, но, судя по коду LSD это не так, щас проверим
Это сообщение отредактировал(а) skhilkov - 29.8.2006, 06:45 -------------------- Кто понял жизнь, тот не спешит. |
|||
|
||||
| skhilkov |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 371 Регистрация: 11.4.2006 Где: TOMSK Репутация: 2 Всего: 7 |
LSD, работает...... у меня вот это ну никак не ловит:
-------------------- Кто понял жизнь, тот не спешит. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Пример дай, когда оно не ловится. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| skhilkov |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 371 Регистрация: 11.4.2006 Где: TOMSK Репутация: 2 Всего: 7 |
Ну вот - если эту функцию юзать, то ничего не ловится....
-------------------- Кто понял жизнь, тот не спешит. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
skhilkov, твой код не компилируется:
1. он не сбалансирован по скобкам 2. неизвестно что за класс ThumbnailProperties -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |