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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Скейл QPixmap  (Прочитано 2351 раз)
stochastic
Новичок

Offline Offline

Сообщений: 6


Просмотр профиля
« : Февраль 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);

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

Сообщений: 404



Просмотр профиля
« Ответ #1 : Февраль 13, 2023, 20:37 »

Не вполне понятно, что именно вам надо, но можно попробовать QScrollArea
Записан

stochastic
Новичок

Offline Offline

Сообщений: 6


Просмотр профиля
« Ответ #2 : Февраль 13, 2023, 22:21 »

Попробовал QScrollArea, окей, оно +/- работает, но меня интересует есть ли корректный способ отскейлить картинку в нужных границах (QLabel в моем случае) без потери качества и изменения фактических данных, или без создания копии функция scaled нам в любом случае "зашакалит" исходник?
Записан
tux
Global Moderator
Бывалый
*****
Offline Offline

Сообщений: 404



Просмотр профиля
« Ответ #3 : Февраль 13, 2023, 23:37 »

Вы хотите уменьшить или увеличить картинку без изменения качества? Это, вообще как?  Смеющийся
Можно поиграться с резкостью, но это всё равно потеря информации, а значит и качества.
Записан

stochastic
Новичок

Offline Offline

Сообщений: 6


Просмотр профиля
« Ответ #4 : Февраль 14, 2023, 03:33 »

Кхм, ну смотрите Улыбающийся, у нас есть, допустим, дефолтный вьювер изображений в том же windows, он же не изменяет изображение при его масштабировании, и в нем есть опция "масштабировать по размеру". Вот меня интересует нечто подобное в рамках Qt, как я понимаю для этого нужно скейлить не само изображение, а элемент, в который мы его помещаем? В моем случае это QLabel, ну и соответственно если он находится в QScrollArea, то и шаг скроллбаров тоже в зависимости от этого подкручивать.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #5 : Февраль 14, 2023, 09:55 »

https://doc.qt.io/qt-6/qtwidgets-widgets-imageviewer-example.html
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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