Название: QPainter: сделать часть изображения прозрачным. Отправлено: Kurles от Февраль 06, 2015, 10:52 Доброго времени суток!
Есть простая задача: в QImage определённый регион QRect сделать полностью прозрачным, удалив при этом предыдущий контент. попробовал "очевидный" вариант: Код - и упс: тот контент, что был в том регионе, за кот. отвечает rect, остался на месте. Полез в доку, нашёл 2 метода: void QPainter::setOpacity ( qreal opacity ) и void setBackgroundMode ( Qt::BGMode mode ) Ура, думаю, оно! Установил opacity в 1., а backgroundMode в Qt::OpaqueMode. Но результат остался прежним :( Пришлось идти на крайние (с моей точки зрения) меры: апдейтить значения пикселей вручную: Код Сиё поделие работает, но как то по мне, дык слишком низкоуровнево. Может кто подскажет, как достичь такого же результата с помощью QPainter? Название: Re: QPainter: сделать часть изображения прозрачным. Отправлено: GreatSnake от Февраль 06, 2015, 11:02 Создай новый QImage и залей его Qt::transparent.
Потом задай через QPainter::setClipRegion() "дырку". Потом через QPainter::drawImage() залей оригинальную картинку. UPD. Достаточно перед рендерингом "дырку" залить Qt::transparent и уже с учётом неё задать clipping ( QRegion( image_rect ).subtracted( hole_rect ) ). Название: Re: QPainter: сделать часть изображения прозрачным. Отправлено: Igors от Февраль 06, 2015, 11:06 Код
Название: Re: QPainter: сделать часть изображения прозрачным. Отправлено: GreatSnake от Февраль 06, 2015, 11:09 Это должно работать. Неа, не должно. Это тоже самое, как положить на холст картины позрачное стекло. ;)Название: Re: QPainter: сделать часть изображения прозрачным. Отправлено: Kurles от Февраль 06, 2015, 11:29 Код
Название: Re: QPainter: сделать часть изображения прозрачным. Отправлено: Kurles от Февраль 06, 2015, 11:31 Создай новый QImage и залей его Qt::transparent. Ух ты блин, спасибо. Но довольно накладно по расходам, хотелось бы без создания временных изображений, пока остаюсь на своём варианте.Потом задай через QPainter::setClipRegion() "дырку". Потом через QPainter::drawImage() залей оригинальную картинку. UPD. Достаточно перед рендерингом "дырку" залить Qt::transparent и уже с учётом неё задать clipping ( QRegion( image_rect ).subtracted( hole_rect ) ). Название: Re: QPainter: сделать часть изображения прозрачным. Отправлено: GreatSnake от Февраль 06, 2015, 11:33 Ух ты блин, спасибо. Но довольно накладно по расходам, хотелось бы без создания временных изображений, пока остаюсь на своём варианте. Смотри в "UPD". Там именно так.Название: Re: QPainter: сделать часть изображения прозрачным. Отправлено: Kurles от Февраль 06, 2015, 11:38 Код
Код
Название: Re: QPainter: сделать часть изображения прозрачным. Отправлено: Igors от Февраль 06, 2015, 11:54 Неа, не должно. Это тоже самое, как положить на холст картины позрачное стекло. ;) Да, по умолчанию он альфу не реплейсит. Значит так ему по рогамКод
А понятие "холст" давно устарело и употребляется только Верес'ом :) Название: Re: QPainter: сделать часть изображения прозрачным. Отправлено: GreatSnake от Февраль 06, 2015, 11:57 А понятие "холст" давно устарело и употребляется только Верес'ом :) В своей ремарке я имел в виду настоящий холст ;)Кстати, тоже была мысля через сomposition за-XOR-ить, но чего-то засомневался. Название: Re: QPainter: сделать часть изображения прозрачным. Отправлено: Kurles от Февраль 06, 2015, 12:36 Всем спасибо. Взял вариант с
Код
|