Russian Qt Forum

Qt => Вопросы новичков => Тема начата: stochastic от Февраль 13, 2023, 16:54



Название: Скейл QPixmap
Отправлено: stochastic от Февраль 13, 2023, 16:54
Привет, не могу найти корректного способа решить проблему со скейлом QPixmap, допустим у нас есть какая-нибудь обоина 8к, при открытии ее без скейла у меня окно улетает далеко за рамки рабочего стола. Я размещаю пиксмапу в QLabel, и если перед этим я делаю лейблу ресайз и скейлю обоину в рамках лейбла, то обоина меняет свои фактические данные. Каким образом можно вписать картинку в рамки лейбла без потери качества?

Пока я пошел таким путем, делаю две пиксмапы (копию), одну зашакаленную я вывожу "миниатюрой" в лейбле, а вторую реальную посылаю на сервер, выглядит все как-то так:
Код:
            plbl->resize(500, 500);
            plbl->clear();

            m_pImage = new QPixmap(str);
            QPixmap img = *m_pImage; // make a copy of QPixmap for correct scale
            const float aspectRatio = float(img.height())/float(img.width());
            img = img.scaled(plbl->width() * aspectRatio, plbl->height(), Qt::KeepAspectRatio);
            plbl->setPixmap(img);
            plbl->show();

            layout()->addWidget(plbl);

На сервере та же история с двумя пиксмапами. Т.е. посылаем мы только реальную картинку, но вот эти копии для скейла напрягают, может есть какой-то способ/пример, как это можно сделать по-человечески?


Название: Re: Скейл QPixmap
Отправлено: tux от Февраль 13, 2023, 20:37
Не вполне понятно, что именно вам надо, но можно попробовать QScrollArea


Название: Re: Скейл QPixmap
Отправлено: stochastic от Февраль 13, 2023, 22:21
Попробовал QScrollArea, окей, оно +/- работает, но меня интересует есть ли корректный способ отскейлить картинку в нужных границах (QLabel в моем случае) без потери качества и изменения фактических данных, или без создания копии функция scaled нам в любом случае "зашакалит" исходник?


Название: Re: Скейл QPixmap
Отправлено: tux от Февраль 13, 2023, 23:37
Вы хотите уменьшить или увеличить картинку без изменения качества? Это, вообще как?  ;D
Можно поиграться с резкостью, но это всё равно потеря информации, а значит и качества.


Название: Re: Скейл QPixmap
Отправлено: stochastic от Февраль 14, 2023, 03:33
Кхм, ну смотрите :), у нас есть, допустим, дефолтный вьювер изображений в том же windows, он же не изменяет изображение при его масштабировании, и в нем есть опция "масштабировать по размеру". Вот меня интересует нечто подобное в рамках Qt, как я понимаю для этого нужно скейлить не само изображение, а элемент, в который мы его помещаем? В моем случае это QLabel, ну и соответственно если он находится в QScrollArea, то и шаг скроллбаров тоже в зависимости от этого подкручивать.


Название: Re: Скейл QPixmap
Отправлено: kambala от Февраль 14, 2023, 09:55
https://doc.qt.io/qt-6/qtwidgets-widgets-imageviewer-example.html