crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Как быстро создавать миниатюры изображений
BagmutA
  опции профиля:
сообщение 20.4.2011, 11:20
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 27
Регистрация: 13.4.2011
Пользователь №: 2599

Спасибо сказали: 0 раз(а)




Репутация:   0  


Созаю миниатюры изображений:
QImage im;
    im.load(filename);
    im = im.scaled(icoWidth, icoHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);            
    im.save( filename_s, "JPG", 95);

Самый медленый этап: im.load(filename); -- занимает 80-90% процетов времени на создание миниатюр.
В общей сложности получается раза в 2-3 медленее чем это происходит в любом просмотрщике изображений(например Gwenview).
Подскажите, пожалуйста, как можно ускорить этот процесс, как создавать миниатюры не загружая полностью изображение.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 20.4.2011, 13:10
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Цитата(BagmutA @ 20.4.2011, 12:20) *
Созаю миниатюры изображений:
QImage im;
    im.load(filename);
    im = im.scaled(icoWidth, icoHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);            
    im.save( filename_s, "JPG", 95);

Самый медленый этап: im.load(filename); -- занимает 80-90% процетов времени на создание миниатюр.
В общей сложности получается раза в 2-3 медленее чем это происходит в любом просмотрщике изображений(например Gwenview).
Подскажите, пожалуйста, как можно ускорить этот процесс, как создавать миниатюры не загружая полностью изображение.

Тебя смущает "подвисание" во время загрузки или что то еще?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BagmutA
  опции профиля:
сообщение 20.4.2011, 13:38
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 27
Регистрация: 13.4.2011
Пользователь №: 2599

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(wiz29 @ 20.4.2011, 13:10) *
Цитата(BagmutA @ 20.4.2011, 12:20) *
Созаю миниатюры изображений:
QImage im;
    im.load(filename);
    im = im.scaled(icoWidth, icoHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);            
    im.save( filename_s, "JPG", 95);

Самый медленый этап: im.load(filename); -- занимает 80-90% процетов времени на создание миниатюр.
В общей сложности получается раза в 2-3 медленее чем это происходит в любом просмотрщике изображений(например Gwenview).
Подскажите, пожалуйста, как можно ускорить этот процесс, как создавать миниатюры не загружая полностью изображение.

Тебя смущает "подвисание" во время загрузки или что то еще?

Это все происходит в отдельном потоке.
Собственно интересует как можна быстро загрузит картинку или вообще как можна быстро создавать миниатюры изображений?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 20.4.2011, 13:54
Сообщение #4


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Тогда нужно использовать конкретные библиотеки для чтения файлов графических форматов, например в JPEG могут хранится миниатюры, но не всегда они есть, поэтому придется загружать файл целиком (в случае когда нет миниатюры в файле). Это сэкономит время лишь в ряде случаев и не для всех типов форматов.

Если время создания миниатюр критично (например известно что они должны создаваться в основном для файлов фоток, в них как правило хранятся миниатюры) то используй libJPEG библиотеку для работы с jpeg'ом. в api libjpeg есть функции по загрузке миниатюр. Есть более общая либа, freeImage, она объединяет в себе несколько библиотек для чтения нескольких форматов файлов, на сколько универсально ее api не могу сказать, в моих проектах используются конкретные библиотеки для конкретных форматов.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 20.4.2011, 15:16
Сообщение #5


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Медленно - это сколько?
У меня на не новом ноуте, чтение изображение из тегов .flac и сжатие до 200pix, происходит практически мгновенно.

Можно покрутить сторонние библиотеки. Тот же openCV, imagemagic. Но у них тоже все упирается во время загрузки изображения. Это скорее от железа зависит.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BagmutA
  опции профиля:
сообщение 20.4.2011, 15:23
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 27
Регистрация: 13.4.2011
Пользователь №: 2599

Спасибо сказали: 0 раз(а)




Репутация:   0  


Ну я же говорю, что в 2-3 раза медленне нежели в других просмотрщиках.

Есть идея использовать QIcon:
        QImage im;                    
    QIcon ico;
    QSize size(200, 200);
        ico.addFile(MainWindow::currentDir + MainWindow::listImage.at(i), size);
        im = ico.pixmap(size).toImage();
        im.save( MainWindow::currentDir + ".prev/" + MainWindow::listName.at(i), "JPG", 95);

Но проблема в том, что в QThread небезопасно использовать QPixmap, пишет:QPixmap: It is not safe to use pixmaps outside the GUI thread. И соответственно не сохраняется миниатюра.
Как можно преобразовать QIcon непосредственно в QImage или хотя бы без промежуточного использования QPixmap?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 20.4.2011, 16:16
Сообщение #7


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


2-я ссылка
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BagmutA
  опции профиля:
сообщение 20.4.2011, 16:43
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 27
Регистрация: 13.4.2011
Пользователь №: 2599

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(RazrFalcon @ 20.4.2011, 16:16) *

Честно говоря я там ничего нужного не нашёл, если там и пытаются делать что-то похожее то посредством QPixmap.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 20.4.2011, 17:10
Сообщение #9


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


нельзя использовать QPixmap вне guithread , соответственно подходит только QImage.
в 2-3 раза медленнее с чем сравниваешь и на каких форматах изображения?

я писал нечто подобное, Image browser, он генерит представление thumbnail'ов работает не медленнее чем IrfanView. в Gui поток приходят миниатюры, дальше отправляются в QGraphicsView представление.

но там для чтения миниатюр из jpeg используется libJPEG. Поскольку они оч мало занимают, то загружаются практически мгновенно....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BagmutA
  опции профиля:
сообщение 20.4.2011, 17:15
Сообщение #10


Студент
*

Группа: Участник
Сообщений: 27
Регистрация: 13.4.2011
Пользователь №: 2599

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(wiz29 @ 20.4.2011, 17:10) *
в 2-3 раза медленнее с чем сравниваешь и на каких форматах изображения?

Брал папку с десятью 18-мегапиксельными изображениями и засекал время создания миниатюр в Gwenview и в моей программе.

Цитата(wiz29 @ 20.4.2011, 17:10) *
я писал нечто подобное, Image browser, он генерит представление thumbnail'ов работает не медленнее чем IrfanView. в Gui поток приходят миниатюры

А можно по подробней.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.12.2024, 21:11