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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QGraphicsBlurEffect и косяки на границах  (Прочитано 4741 раз)
Torvald
Самовар
**
Offline Offline

Сообщений: 118


Просмотр профиля
« : Июль 22, 2016, 17:42 »

QGraphicsBlurEffect умеет довольно быстро размывать, на сколько я понял это получается в результате даунскейла изображения. И судя по всему из-за этого на границах изображение становится прозрачным или того цвета, которым был залит фон...
В общем вот код и полученное изображение.
Собственно вопрос, можно ли стандартными средствами Qt быстро размыть изображение без косяков?
Код
C++ (Qt)
inline static void fastBlur(const QImage &inImg, QImage &outImg, float radius)
{
QGraphicsBlurEffect *blur = new(std::nothrow) QGraphicsBlurEffect();
if (!blur)
{
qDebug() << "can't create QGraphicsBlurEffect";
return;
}
blur->setBlurHints(QGraphicsBlurEffect::PerformanceHint);
blur->setBlurRadius(radius);
 
QGraphicsScene scene;
QGraphicsPixmapItem item;
item.setPixmap(QPixmap::fromImage(inImg));
item.setGraphicsEffect(blur);
scene.addItem(&item);
outImg.fill(Qt::gray);
QPainter ptr(&outImg);
scene.render(&ptr);
delete blur;
}
« Последнее редактирование: Июль 22, 2016, 17:44 от Torvald » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Июль 23, 2016, 07:58 »

Собственно вопрос, можно ли стандартными средствами Qt быстро размыть изображение без косяков?
Если это картинка (а не контрол), то проще заблюрить самому, без всяких эффектов
Записан
Torvald
Самовар
**
Offline Offline

Сообщений: 118


Просмотр профиля
« Ответ #2 : Июль 23, 2016, 11:38 »

Не хотелось изобретать велосипед, если он уже есть в Qt. Если нет, то ок. Но пока не ясно, есть он или нет.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Июль 23, 2016, 11:44 »

Не хотелось изобретать велосипед, если он уже есть в Qt. Если нет, то ок. Но пока не ясно, есть он или нет.
Понимаю, но поиски - тоже время/усилия.

Кстати в OpenGL есть приемчик чтобы блюрить быстро с любым радиусом. На этапе предрасчета для каждого пыкселя вычисляется сумма всех пыкселей пр-ка (левый верхний угол - сам пыксель).
Записан
Torvald
Самовар
**
Offline Offline

Сообщений: 118


Просмотр профиля
« Ответ #4 : Июль 24, 2016, 11:30 »

С OpenGL все ясно, мне именно на CPU нужно. Было)
Ну да ладно, нет так нет, сам напишу
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Июль 24, 2016, 13:04 »

С OpenGL все ясно, мне именно на CPU нужно. Было)
Никто не мешает сделать то же самое на CPU

Ну да ладно, нет так нет, сам напишу
Я не утверждал что нет, но в принципе - здоровый подход. Велик - основа прогресса.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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