Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Igors от Января 25, 2014, 15:36



Название: Бленд по маске
Отправлено: Igors от Января 25, 2014, 15:36
Добрый день

В коде paintEvent нужно для заданного QRect

- если цвет пикселя отличается от заданного не более чем на <константа>, то заменить этот цвет на другой

- поделить RGB пикселя на заданное значение (по-простому "затемнить"), но при этом не трогать заданный цвет (background)

Конечно это очень просто для QImage, но его нет, есть только QPainter. Как это сделать "легально" не спрыгивая в нативняк, не влезая в приватные хедеры и.т.п.

Спасибо


Название: Re: Бленд по маске
Отправлено: Igors от Января 27, 2014, 13:20
Апну тему, попробую "поддержать разговор"  :) На первый взгляд ограничение кажется глупым, ну как это "нет QImage"? Да отрендерить сначала в QImage, потом его нарисовать - и все дела! Именно с этого я (резво) начинал

1) Сначала поставил всем окнам кеш. Да, так проблем с растровыми операциями нет, но приложение при старте заняло ~300Mb памяти (50 при прежнем заведующем). И это еще не все окна созданы. Как ни крути, а triple-buffer = неграмотно, теория права

2) Хорошо, тогда при каждом рисовании сначала рисуем в QImage, который будет удален после того как отрисован. Конечно это не украшает, т.к. приличный буфер создается на каждом paint. Ну ладно, это можно пережить, но я попадаю в др беду - теперь ведь нет возможности рисовать адаптивно. Пример: пользователь кликнул в прямоугольник - ну я его и подсветил (или убрал подсветку) теми операциями что описаны выше. А с буфером QImage у меня содержимое пр-ка нет (он создается пустой), и нереально выдрать код рисования именно его (этой области) из тонны кода paint

Мда, не все так просто как хотелось бы  :)