crossplatform.ru

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


  Ответ в Как быстро создавать миниатюры изображений
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
BagmutA Дата 23.4.2011, 11:13
  Проблема решена.
Может кому то пригодится:
int icoWidth    = 200;
int icoHeight    = 200;
    QImageReader imageReader(MainWindow::currentDir + MainWindow::listImage.at(i));

    QSize size;
    int image_width;
    int image_height;

    if (imageReader.supportsOption(QImageIOHandler::Size))
    {
        size = imageReader.size();
        image_width = size.width();
        image_height = size.height();
    }

    double ratio = (double)image_width / (double)image_height;
    if (ratio >= 1)
    {
    image_width = icoWidth;
    image_height = image_width / ratio;
    }
    else
    {
        image_height = icoHeight;
        image_width = image_height * ratio;
    }

    imageReader.setScaledSize(QSize(image_width, image_height));
    QImage image = imageReader.read();
wiz29 Дата 20.4.2011, 17:28
  к сожалению код показать не имею права, но подсказать кое что могу. 18 мпикс фотки формат jpeg? какие либы в составе Gwenview.

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

Image browser, это компонент в разрабатываемой совтине, аналог Browse in bridge в Photoshop. но надо сказать там заметное время тратится на открытие больших картинок. Хотя они используют не Qt движок.

попробуй вырезать thumbnail из тестовых фоток и скормить Gwenview. Посмотри насколько быстро у них это получится для сравнения. QImage всегда зачитывают весь файл, вроде в мобильной версии Qt были какие то классы связанные с получением thumbnail'ов, но они не доступны для PC версии
BagmutA Дата 20.4.2011, 17:15
 
Цитата(wiz29 @ 20.4.2011, 17:10) *
в 2-3 раза медленнее с чем сравниваешь и на каких форматах изображения?

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

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

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

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

но там для чтения миниатюр из jpeg используется libJPEG. Поскольку они оч мало занимают, то загружаются практически мгновенно....
BagmutA Дата 20.4.2011, 16:43
 
Цитата(RazrFalcon @ 20.4.2011, 16:16) *

Честно говоря я там ничего нужного не нашёл, если там и пытаются делать что-то похожее то посредством QPixmap.
RazrFalcon Дата 20.4.2011, 16:16
  2-я ссылка
BagmutA Дата 20.4.2011, 15:23
  Ну я же говорю, что в 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, 15:16
  Медленно - это сколько?
У меня на не новом ноуте, чтение изображение из тегов .flac и сжатие до 200pix, происходит практически мгновенно.

Можно покрутить сторонние библиотеки. Тот же openCV, imagemagic. Но у них тоже все упирается во время загрузки изображения. Это скорее от железа зависит.
wiz29 Дата 20.4.2011, 13:54
  Тогда нужно использовать конкретные библиотеки для чтения файлов графических форматов, например в JPEG могут хранится миниатюры, но не всегда они есть, поэтому придется загружать файл целиком (в случае когда нет миниатюры в файле). Это сэкономит время лишь в ряде случаев и не для всех типов форматов.

Если время создания миниатюр критично (например известно что они должны создаваться в основном для файлов фоток, в них как правило хранятся миниатюры) то используй libJPEG библиотеку для работы с jpeg'ом. в api libjpeg есть функции по загрузке миниатюр. Есть более общая либа, freeImage, она объединяет в себе несколько библиотек для чтения нескольких форматов файлов, на сколько универсально ее api не могу сказать, в моих проектах используются конкретные библиотеки для конкретных форматов.
BagmutA Дата 20.4.2011, 13:38
 
Цитата(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).
Подскажите, пожалуйста, как можно ускорить этот процесс, как создавать миниатюры не загружая полностью изображение.

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

Это все происходит в отдельном потоке.
Собственно интересует как можна быстро загрузит картинку или вообще как можна быстро создавать миниатюры изображений?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 26.11.2022, 22:14