Russian Qt Forum
Ноябрь 24, 2024, 02:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Максимальный размер изображения в QImage  (Прочитано 7340 раз)
rustamx
Гость
« : Октябрь 17, 2011, 18:02 »

Как определить максимальный размер изображения, которое можно загрузить с помощью QImage.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Октябрь 17, 2011, 18:25 »

Скорее всего оно ограничено доступной памятью.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
rustamx
Гость
« Ответ #2 : Октябрь 18, 2011, 00:00 »

Ок. Изображение хранится без сжатия или я не прав? Просто в следующем коде я пробовал различные пары width и height и вычислял примерный размер изображения по этой формуле width * height * 4 / 1024 / 1024 = X в МБ. Оно примерно совпадало с тем, что показывает top( работаю под Linux). Резонный вопрос: сколько выделяется памяти приложению? В универе говорили, что 4Гб, ну это с вирт. памятью. Но программа валится уже при 2100Мб.
Код:
#include <QImage>
#include <QDebug>


int main()
{
    const int width  = 20000;
    const int height = 20000;
    QImage img( width, height, QImage::Format_RGB32 );

    if ( img.isNull() )
qDebug() << "Bad allocate!\n";
    img.save( "1.jpg" );

    return 0;
}
Записан
Ubuntu_linux
Гость
« Ответ #3 : Октябрь 18, 2011, 00:23 »

Зачем, можно использовать имаге ридер и подгружать
конкретную область изображения.
Записан
rustamx
Гость
« Ответ #4 : Октябрь 18, 2011, 17:39 »

Мне нужно создавать такие большие изображения)
Записан
iroln
Гость
« Ответ #5 : Октябрь 18, 2011, 20:22 »

Цитировать
Резонный вопрос: сколько выделяется памяти приложению? В универе говорили, что 4Гб, ну это с вирт. памятью. Но программа валится уже при 2100Мб.
Встречный вопрос, у вас приложение 32-разрядное или 64-разрядное? Если 32-разрядное, то 2 GB на процесс.

Насколько я помню, QImage может хранить изображения, пока выделенная процессу оперативная память не закончится.
Я работаю в своей программе с изображениями ~5000x6000 пикселей в UInt16, но естественно, не на 32-разрядах.

А вообще с очень большими изображениями работают не так. Никто не хранит в памяти такие большие изображения. Обычно подгружают нужные куски частями, а то, что нужно чаще всего кэшируют.
« Последнее редактирование: Октябрь 18, 2011, 20:26 от iroln » Записан
BRE
Гость
« Ответ #6 : Октябрь 18, 2011, 20:44 »

Если 32-разрядное, то 2 GB на процесс.
Это в венде так, у linux - 3G на процесс.
Записан
iroln
Гость
« Ответ #7 : Октябрь 18, 2011, 20:49 »

Цитировать
Это в венде так, у linux - 3G на процесс.
Согласен, не заметил, что человек Linux работает. В Windows тоже можно сделать 3GB на процесс http://technet.microsoft.com/en-us/library/bb124810%28EXCHG.65%29.aspx
Записан
rustamx
Гость
« Ответ #8 : Октябрь 18, 2011, 22:09 »

Цитировать
А вообще с очень большими изображениями работают не так. Никто не хранит в памяти такие большие изображения. Обычно подгружают нужные куски частями, а то, что нужно чаще всего кэшируют.
Было бы интересно в общих чертах узнать как это делается) ОС 32х битная
Записан
iroln
Гость
« Ответ #9 : Октябрь 18, 2011, 23:05 »

rustamx

Зависит от того, насколько большие изображения и что именно вы с ними делаете. Вам их обрабатывать надо или отображать?

Могу предложить почитать статью на эту тему от инженера Mathworks (MATLAB). Она правда к Qt не относится, но вообще полезная.
http://blogs.mathworks.com/steve/2011/08/16/dealing-with-really-big-images-block-processing/

« Последнее редактирование: Октябрь 18, 2011, 23:11 от iroln » Записан
rustamx
Гость
« Ответ #10 : Октябрь 18, 2011, 23:26 »

Спасибо) Мне нужно их склеивать.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.054 секунд. Запросов: 23.