|
0 / 0 / 0
Регистрация: 07.08.2014
Сообщений: 14
|
|
Как сделать Bitmap в виде скругленного прямоугольника и прозрачным фоном за пределами этого прямоуголника19.04.2020, 16:07. Показов 4573. Ответов 24
Метки bitblt, createroundrectrgn, deleteobject, halftone, maskblt, roundrect, selectcliprgn, setstretchbltmode, stretchblt, tbitmap, delphi (Все метки)
Добрый день, нужна помощь. Требуется с графического файла (bmp, jpeg и прочих) нарисовать на CANVAS (на канве нужного контролла, для примера можно даже и на форме) это изображение, но ограниченное закругленным прямоугольником и чтобы все что находится за пределами этого прямоугольника было прозрачным. Желательно такого же размера, что и файл. Т.е. нужно просто картинку скруглить как бы, а остальное сделать прозрачным.
Заранее спасибо, надеюсь на вашу помощь.
0
|
|
| 19.04.2020, 16:07 | |
|
Ответы с готовыми решениями:
24
Как сделать кнопку с прозрачным фоном
|
|
0 / 0 / 0
Регистрация: 07.08.2014
Сообщений: 14
|
||||||
| 28.04.2020, 06:39 [ТС] | ||||||
|
Изначально и был на основе TGraphicControl. Но намучившись, наэксперементировавшись с рисованием сделал через TGraphicControl, чтобы применить регионы, т.к. с TGraphicControl у меня не получалось использовать handle для передачи параметра в SetWindowRgn(MButArray[i].Handle,rgn1,true);
Вот мой код, знаю что он корявый, никогда не делал свои контроллы, но не нашел способа как решить данную задачу со стандартным набором. Может постепенно и доведу его до ума.
GdiPlus у меня используется. Изначально я рисовал кнопку закругленной с помощью GPGraphicsPath. Потом понадобилось добавить рисунок и понеслось.. Как-то так. Спасибо большое, что тратите время на это. Функция GetScaledCenteredBitmap почему-то не работает с png изображениями.
0
|
||||||
|
|
|||||||||||
| 28.04.2020, 18:07 | |||||||||||
|
Так это же и хорошо! Надо было сразу сказать тока про GDI+.
![]() TGPGraphicsPath по идее можно не только закрашивать, но и использовать в качестве региона отсечения.Правда я тут что-то похожее намастерил для тестирования - так-то работает, но ожидаемого сглаживания чё-то не выходит, пока не могу понять почему вдруг...
0
|
|||||||||||
|
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
|
|
| 29.04.2020, 03:43 | |
|
Функция GdiAlphaBlend тоже неплохо это делает. Только ей нужно подавать подготовленный источник.
0
|
|
|
|
||
| 29.04.2020, 21:09 | ||
|
Попробовал вместо
TGPGraphicsPath задавать отсечение через HRGN - такая же фигня выходит, да даже похуже стало.хм... Чё-то похоже в GDI+ нету ROP-операций типа SRCAND/SRCPAINT/MERGEPAINT...Просто при работе с GDI+ мне никогда такое и не надобилось, но я как-то автоматически полагал что оно должно уметь. А вона оказалося что нет... Операций типа "наложить картинку не затрагивая альфа-канал" или "использовать альфу кисти" тоже что-то не нашёл... Не хочется лазить в сами пиксели. Хочется найти решение чтоб более штатно получалось... Через SetRemapTable() можно всё что угодно, но для данной задачи не пойдёт - будет словно забивать один гвоздь четырьмя миллиардами молотков...Пробую колдовать с SetColorMatrix(), но задуманное никак не хочет работать, обнуляет каналы где как раз было не надо.Точной формулы происходящего при её использовании не нашёл, а без этого местами непонятно. Вопросы по вашему коду:
Добавлено через 19 минут При режиме CompositingModeSourceCopy сглаживание также отрубается полностью... Безобразие...Проще уже создать временный битмап, создать для него битмап-маску и слазить в пиксели... Добавлено через 4 минуты
Read? Может можно только Write? Ну или можно ли оставить лишь публичый SetImage()?
0
|
||
|
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
|
|||||||||||
| 29.04.2020, 21:52 | |||||||||||
|
Наваял пару функций для подготовки битмапа с альфа-каналом:
0
|
|||||||||||
| 29.04.2020, 21:52 | |
|
Как сделать шахматные фигуры с прозрачным внешним фоном? Как сделать так, чтобы gif анимация 1920х1080 с прозрачным фоном была поверх всех окон?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|