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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Scale QImage  (Прочитано 6756 раз)
DarkKnight
Гость
« : Январь 18, 2012, 20:28 »

Здравствуйте!Необходимо "отскалить" QImage, только вот как?
Загрузка:
Код
C++ (Qt)
imgStatusBar = new QImage();
imgStatusBar->load(IMAGE_PATH);
pixStatusBar.convertFromImage(*imgStatusBar);
QGraphicsPixmapItem* entStatusBar = scene->addPixmap(pixStatusBar);
 

Скалю:
Код
C++ (Qt)
QImage newimg = imgStatusBar->scaled(formWidth, statusBarHeight);
scene->removeItem(entStatusBar);
pixStatusBar.fromImage(newimg);
SAFE_DELETE(entStatusBar);
entStatusBar = scene->addPixmap(pixStatusBar);
entStatusBar->setPos(-1, formHeight);
 

Такой скайл это ж кошмар какой то,и при этом еще и не скалится. Скалил как-то по-другому,тоже ужас, но скалится, но неправильно. Как это делается правильно?И правильно ли я "загружаю" картинку, если другие картинки,загружаемые таким же образом, мне надо будет потом проверять на коллизии, или можно сделать проще?
« Последнее редактирование: Январь 18, 2012, 22:28 от DarkKnight » Записан
mutineer
Гость
« Ответ #1 : Январь 18, 2012, 21:51 »

Ты бы описал чем тебе результат не нравится, а то фиг знает...

Код
C++ (Qt)
QImage QImage::scaled ( int width, int height, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation ) const

Третий и четвертый параметр там не зря есть, попробуй дать им другие значения

"Скалил как-то подругому" - это вообще шедевр... Экстрасенс в отпуске, будет нескоро
Записан
DarkKnight
Гость
« Ответ #2 : Январь 18, 2012, 22:21 »

Да, понимаю что мысли читать не умеете, просто правда не помнил как делал это на тот момент. Делал так:
Код
C++ (Qt)
pixStatusBar = pixStatusBar.scaledToWidth(formWidth);
scene->removeItem(entStatusBar);
SAFE_DELETE(entStatusBar);
entStatusBar = scene->addPixmap(pixStatusBar);
 

В итоге вместо градиентной желто-оранжевой полоски у меня получилась скаленая, но просто оранжевая.
Разные параметры в предыдущем варианте указывал - результата ноль.

Добавлено:
Сам решил,так:
Код
C++ (Qt)
pixStatusBar = pixStatusBar.scaled(formWidth, statusBarHeight,Qt::AspectRatioMode::IgnoreAspectRatio, Qt::TransformationMode::FastTransformation);
 

Извините)Видать переработал...
« Последнее редактирование: Январь 18, 2012, 22:24 от DarkKnight » Записан
mutineer
Гость
« Ответ #3 : Январь 18, 2012, 22:59 »

так ниче ж не поменялось - это ж значения по умолчанию Непонимающий
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #4 : Январь 19, 2012, 10:31 »

в инете есть много готовых алгоритмов и даже готовых библиотек для скалинга изображений (некоторые даже хорошо оптимизированы).
Записан
DarkKnight
Гость
« Ответ #5 : Январь 19, 2012, 16:21 »

так ниче ж не поменялось - это ж значения по умолчанию Непонимающий
в первом был QImage, во втором - QPixmap.

в инете есть много готовых алгоритмов и даже готовых библиотек для скалинга изображений (некоторые даже хорошо оптимизированы).
Хотелось средствами Qt,да и думал может есть что-то попроще,без конвертирования.
Записан
mutineer
Гость
« Ответ #6 : Январь 19, 2012, 16:24 »

А, провтыкал что объект изменился
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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