Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: rustamx от Октябрь 17, 2011, 18:02



Название: Максимальный размер изображения в QImage
Отправлено: rustamx от Октябрь 17, 2011, 18:02
Как определить максимальный размер изображения, которое можно загрузить с помощью QImage.


Название: Re: Максимальный размер изображения в QImage
Отправлено: Пантер от Октябрь 17, 2011, 18:25
Скорее всего оно ограничено доступной памятью.


Название: Re: Максимальный размер изображения в QImage
Отправлено: rustamx от Октябрь 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;
}


Название: Re: Максимальный размер изображения в QImage
Отправлено: Ubuntu_linux от Октябрь 18, 2011, 00:23
Зачем, можно использовать имаге ридер и подгружать
конкретную область изображения.


Название: Re: Максимальный размер изображения в QImage
Отправлено: rustamx от Октябрь 18, 2011, 17:39
Мне нужно создавать такие большие изображения)


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

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

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


Название: Re: Максимальный размер изображения в QImage
Отправлено: BRE от Октябрь 18, 2011, 20:44
Если 32-разрядное, то 2 GB на процесс.
Это в венде так, у linux - 3G на процесс.


Название: Re: Максимальный размер изображения в QImage
Отправлено: iroln от Октябрь 18, 2011, 20:49
Цитировать
Это в венде так, у linux - 3G на процесс.
Согласен, не заметил, что человек Linux работает. В Windows тоже можно сделать 3GB на процесс http://technet.microsoft.com/en-us/library/bb124810%28EXCHG.65%29.aspx


Название: Re: Максимальный размер изображения в QImage
Отправлено: rustamx от Октябрь 18, 2011, 22:09
Цитировать
А вообще с очень большими изображениями работают не так. Никто не хранит в памяти такие большие изображения. Обычно подгружают нужные куски частями, а то, что нужно чаще всего кэшируют.
Было бы интересно в общих чертах узнать как это делается) ОС 32х битная


Название: Re: Максимальный размер изображения в QImage
Отправлено: iroln от Октябрь 18, 2011, 23:05
rustamx

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

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



Название: Re: Максимальный размер изображения в QImage
Отправлено: rustamx от Октябрь 18, 2011, 23:26
Спасибо) Мне нужно их склеивать.