Максимальный размер QPixmap / QImage Windows - PullRequest
2 голосов
/ 11 февраля 2011

У меня есть QGraphicsView для очень широкой QGraphicsScene.Мне нужно нарисовать фон в drawBackground (), и фон немного сложный (длинный цикл), хотя его не нужно постоянно перекрашивать.Я сохраняю его в статической QPixmap (я тоже пробовал QImage) внутри функции drawBackground (), и это растровое изображение - это то, что я рисую на рисователе вида.Только при необходимости QPixmap закрашивается снова.

Если бы я не использовал статическое растровое изображение, сложный фон создавался бы каждый раз, когда я, например, прокручивал вбок.Проблема в том, что, по-видимому, в Windows есть максимальная ширина для растровых изображений, на моем компьютере она равна 32770. Я мог бы хранить список растровых изображений и рисовать их рядом, но это сделало бы код более уродливым, и я также не знаюмаксимальная ширина растрового изображения - для каждой машины Windows.Поскольку это может быть хорошо известной проблемой, мне было интересно, есть ли у кого-нибудь лучшее решение.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2011

Это обычный случай использования шаблона мозаики. В основном вы разбиваете фон на маленькие изображения.

Я не уверен, почему вы думаете, "это сделает код более уродливым". Это, конечно, не однострочник. В зависимости от того, есть ли у вас фоновое изображение фиксированного размера или нет, код листов обычно довольно прост.

0 голосов
/ 11 февраля 2011

Вероятно, вы можете избежать ограничения окон, используя не ускоренное растровое устройство рисования, но 32770 * 1024 составляет 100 МБ растрового изображения;Вы, вероятно, не хотите этого делать, даже если Windows позволит вам.

Вы уже думали об обычном ответе (разбейте его на куски более разумного размера и загружайте / генерируйте их по требованию).Другой частью обычного решения является использование чего-то вроде QPixmapCache для сохранения недавно использованных плиток, чтобы вы не создавали их слишком часто (только когда пользователь прокручивает длинный путь).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...