Russian Qt Forum

Qt => Мультимедиа => Тема начата: v1ntorez от Октябрь 05, 2010, 13:53



Название: QPixmap как сохранять качество картинки после QPixmap::scaled
Отправлено: v1ntorez от Октябрь 05, 2010, 13:53
Всем привет!
Возникла проблема, как правильно изменять(динамически) размер картинки чтоб сохранялось ее качество.
Например если есть QLable на форме и для него я ставлю setStyleSheet c border-image: то при ресайзе формы картинка внутри QLable меняеться и ее качество сохраняется. Если создать свой Widget и туда поставить QLable и сделать тоже самое картина не изменит свой размер. Если же поставить в QLable QPixmap и изменять размер картинки через QPixmap::scaled картинка ужасно меняеться(качество картинки совсем никакое ).
Может кто то сталкивался с такой проблемой.


Название: Re: QPixmap как сохранять качество картинки после QPixmap::scaled
Отправлено: Kolobok от Октябрь 05, 2010, 13:59
Попробуй прочитать документацию QPixmap::scaled(...)


Название: Re: QPixmap как сохранять качество картинки после QPixmap::scaled
Отправлено: v1ntorez от Октябрь 05, 2010, 14:05
спасибо)) ответ в пустую. в доках ничего нет. Там есть кучу флагов, но на качество оно не влияет совсем, только на размер


Название: Re: QPixmap как сохранять качество картинки после QPixmap::scaled
Отправлено: BRE от Октябрь 05, 2010, 14:23
Что значит "... сохранялось ее качество"?
Если картинку 10x10 точек отмасштабировать до размеров 100x100 точек, то качество у нее будет соответствующее, т.е. никакое. По любому.  :)


Название: Re: QPixmap как сохранять качество картинки после QPixmap::scaled
Отправлено: Igors от Октябрь 05, 2010, 14:32
На увеличение хорошо работает bicubic (исходники есть в ImageMagic). Есть ли это в Qt - не знаю. Ну и как уже сказали, масштаб должен быть разумным: напр. в 2 раза, ну в 4 (но не в 10)


Название: Re: QPixmap как сохранять качество картинки после QPixmap::scaled
Отправлено: v1ntorez от Октябрь 05, 2010, 14:33
) а если наоборот?? и не 100х100 а к примеру 200х200 к 100х100 то всетавно мелкие детали начинают расползаться. А при setStyleSheet они сохраняються.


Название: Re: QPixmap как сохранять качество картинки после QPixmap::scaled
Отправлено: BRE от Октябрь 05, 2010, 14:39
) а если наоборот?? и не 100х100 а к примеру 200х200 к 100х100 то всетавно мелкие детали начинают расползаться. А при setStyleSheet они сохраняються.
В scale какой transformMode используешь?


Название: Re: QPixmap как сохранять качество картинки после QPixmap::scaled
Отправлено: v1ntorez от Октябрь 05, 2010, 14:39
Давайте так. У вас есть картинка. На картинке изображен бублик. На бублике есть цветочек(например). Вы загружаете ее в QLable через QPixmap. Начинаете менять размер. При каждом уменшение(увиличение) QLable с QPixmap меняеться. Так вот если менять это через QPixmap цветочек будет размыт.


Название: Re: QPixmap как сохранять качество картинки после QPixmap::scaled
Отправлено: Kolobok от Октябрь 05, 2010, 14:40
спасибо)) ответ в пустую. в доках ничего нет. Там есть кучу флагов, но на качество оно не влияет совсем, только на размер

Вообще-то только два флага.

Код:
QPixmap QPixmap::scaled ( const QSize & size, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation ) const

Цитировать
enum Qt::TransformationMode
This enum type defines whether image transformations (e.g., scaling) should be smooth or not.
Constant   Value   Description
Qt::FastTransformation         0   The transformation is performed quickly, with no smoothing.
Qt::SmoothTransformation    1   The resulting image is transformed using bilinear filtering.

Ы?


Название: Re: QPixmap как сохранять качество картинки после QPixmap::scaled
Отправлено: v1ntorez от Октябрь 05, 2010, 14:43
Если к этому прибавить ешче Qt::AspectRatioMode а там их 3.
И того вариантов больше)))


Название: Re: QPixmap как сохранять качество картинки после QPixmap::scaled
Отправлено: Zeka13 от Май 10, 2012, 18:53
    QPixmap logoScaled = logo.scaled(QSize (70,70),Qt::KeepAspectRatio, Qt::SmoothTransformation);