Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Масштабирование фотографий. 
:(
    Опции темы
ShurikA
Дата 29.11.2006, 03:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


Профиль
Группа: Завсегдатай
Сообщений: 1364
Регистрация: 29.10.2005
Где: Канада

Репутация: 2
Всего: 3



Какой способ максимально быстрый  эфективный для масштабирование фотографий?
пока что есть такой:
Код

private void runThumbnailGenration() {
    Runnable thumbnailGenerator = new Runnable() {
      public void run() {
        int len = thumbnails.size();
        for (int i = 0; i < len; i++) {
          try {
            FileThumbnail thumbnail = thumbnails.get(i);
            if (accept(thumbnail.getFile())) {
              BufferedImage largeImage = ImageIO.read(thumbnail.getFile());
              double ratio = Math.min(MAX_WIDTH / largeImage.getWidth(),
                                      MAX_HEIGHT / largeImage.getHeight());

              AffineTransformOp affineTransformOp = new AffineTransformOp(
                  AffineTransform.getScaleInstance(ratio, ratio),
                  AffineTransformOp.TYPE_BICUBIC);

              BufferedImage thumbnailImage = affineTransformOp.
                                             createCompatibleDestImage(
                                                 largeImage, null);
              affineTransformOp.filter(largeImage, thumbnailImage);

              thumbnail.setIcon(thumbnailImage);
              fireContentsChanged(ThumbnailListModel.this, i, i);
              //Thread.sleep(50);
            }
          } catch (Exception e) {
            e.printStackTrace();
          } catch (Error err) {
            err.printStackTrace();
          }
        }
      }
    };

    thread = new Thread(thumbnailGenerator, "ThumbnailGenerator");
    thread.setPriority(Thread.MIN_PRIORITY);
    thread.setDaemon(true);
    thread.start();
  }

thumbnails - массив обьектов с путём на фаилы фоток.
дело в том что так всё работает пока не натыкается не фаил больше чем 2М. Потом прога просто затыкается до беконечности, или у JVM заканчивается память.
Любой совет приму. Уж очень не хечется писать библиотеку на С...  smile 
Спасибо.


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
ShurikA
Дата 30.11.2006, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


Профиль
Группа: Завсегдатай
Сообщений: 1364
Регистрация: 29.10.2005
Где: Канада

Репутация: 2
Всего: 3



Вот такое я нашёл решение:
Код

private static BufferedImage scaleNewWay(BufferedImage src, double ratio) {
    BufferedImage bi = new BufferedImage((int) (src.getWidth() * ratio),
                                         (int) (src.getHeight() * ratio),
                                         BufferedImage.TYPE_INT_RGB);
    Graphics2D g2d = bi.createGraphics();

    AffineTransform at = AffineTransform.getScaleInstance(ratio, ratio);
    g2d.drawRenderedImage(src, at);
    g2d.dispose();
    return bi;
  }

масштабирование моментально!!! smile 

но теперь другой вопрос:
как максимально быстсо закрузить картинку в BufferedImage?
пока что фаил в 3.5Мб отрабытывается почти за 3 секунды:
Код

private static BufferedImage LoadImageOld(File f) {
    BufferedImage bi = null;
    try {
      bi = ImageIO.read(f);
    } catch (Exception e) {
      e.printStackTrace();
    } catch (Error err) {
      err.printStackTrace();
    }

    return bi;
  }



--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0416 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.