Название: QPixmap и память Отправлено: Ground от Июль 15, 2011, 13:55 Доброго времени суток!
Есть изображение, 3000х2000пкс, весит 2мб, при загрузке в QPixmap дает 3000*2000*32 = 19,2Мб. Как оптимизировать расход памяти? Подскажите общие принципы решения этой проблемы? Название: Re: QPixmap и память Отправлено: Пантер от Июль 15, 2011, 14:05 Изображение видимо jpeg? ;)
Название: Re: QPixmap и память Отправлено: Ground от Июль 15, 2011, 14:29 Изображение видимо jpeg? ;) А имеет значение? Предполагается работа с PNG и JPEG.Название: Re: QPixmap и память Отправлено: Пантер от Июль 15, 2011, 14:31 Ну, просто в PNG и JPEG изображение сжато. А в QPixmap оно "разжато". Так что не парься - так и должно быть.
Название: Re: QPixmap и память Отправлено: Ground от Июль 15, 2011, 15:09 Ну, просто в PNG и JPEG изображение сжато. А в QPixmap оно "разжато". Так что не парься - так и должно быть. Да ПО планируется использовать на маломощных рабочих станциях, где ценится каждый мегабайт. Пока что в мыслях примерно следующая концепция: загружать картинку в память в виде raw data, потом в PaintEvent выводить требуемую часть изображения (но как это все провернуть - не знаю). При максимальном разрешении в 1920х1080 (а вероятно, будет даже использоваться разрешение 1024х768) мы получим расход памяти ~8Мб, что уже лучше. Но тут возникает вопрос - не нагрузим ли мы процессор такими преобразованиями в каждом PaintEvent? А вообще, не хотелось бы изобретать велосипедов - может быть есть какой-нибудь способ проще? Название: Re: QPixmap и память Отправлено: GreatSnake от Июль 15, 2011, 15:24 Грузи картинку в QImage.
Отрисовку делай как в первом варианте (http://www.prog.org.ru/index.php?topic=8266.msg102364#msg102364). И надо знать, что QPixmap хранится на стороне сервера, а QImage на стороне клиента. Название: Re: QPixmap и память Отправлено: Igors от Июль 15, 2011, 16:26 И надо знать, что QPixmap хранится на стороне сервера, а QImage на стороне клиента. Я читал эту фразу но не совсем понял: кто здесь "сервер"? Видеопамять? GPU? Это возможно но "если железо позволяет" - и всегда можно создать такое кол-во QPixmap что расход по ресурсам будет превышен. Да ПО планируется использовать на маломощных рабочих станциях, где ценится каждый мегабайт. Понятно что лучше "быть богатым и здоровым", но так не всегда выходит :) Здесь важно не только (в может и не столько) максимальный размер имеджа, но и число имеджей которые должны быть одновременно загружены. Очень просто но полезно сразу завести ограничитель в preferences. напрПока что в мыслях примерно следующая концепция: загружать картинку в память в виде raw data, потом в PaintEvent выводить требуемую часть изображения (но как это все провернуть - не знаю). При максимальном разрешении в 1920х1080 (а вероятно, будет даже использоваться разрешение 1024х768) мы получим расход памяти ~8Мб, что уже лучше. Но тут возникает вопрос - не нагрузим ли мы процессор такими преобразованиями в каждом PaintEvent? А вообще, не хотелось бы изобретать велосипедов - может быть есть какой-нибудь способ проще? MAX_IMAGE_SIZE = 1024 Если железо совсем слабенькое - ставите поменьше и сразу scale больших имеджей при загрузке. Худо-бедно но работать будет. А увлекаясь оптимизацией Вы можете оказаться в неудобном положении когда в один прекрасный день у заказчика появится новое железо. Увеличивать только нужную часть изображения в paintEvent (как показал GreatSnake) придется - но это часто неизбежно и на хорошем железе - напр. когда нужны очень большие увеличения Название: Re: QPixmap и память Отправлено: Ubuntu_linux от Июль 16, 2011, 12:27 Хи-хи, какой бред ;)
С всеми задачами может с лихвой справиться QImageReader! Там есть все что вам надо. Название: Re: QPixmap и память Отправлено: GreatSnake от Июль 16, 2011, 14:46 И надо знать, что QPixmap хранится на стороне сервера, а QImage на стороне клиента. Я читал эту фразу но не совсем понял: кто здесь "сервер"? Видеопамять? GPU? Это возможно но "если железо позволяет" - и всегда можно создать такое кол-во QPixmap что расход по ресурсам будет превышен. Имея слабые мощности это нужно иметь в виду. |