![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Разъяснятор
Пользователь
Регистрация: 21.04.2022
Сообщений: 91
|
![]()
Есть изображение 9-конечной звезды на белом фоне (изображение прикрепляю). Нужно сделать из неё регион и обрезать по ней форму.
Такой код не работает: Код:
Код:
|
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
![]()
Ошибка в том, что вы перебираете пиксели. Но если посмотрите на значения переменных (X1, Y1) => (X2, Y2) в отладчике, тогда поймёте, что они каждый раз выбирают пустую область (X1 = X2 и Y1 = Y2). В этой области нет ни одного пикселя.
Вам нужно задавать область хотя бы X1 = X, Y1 = Y, X2 = X + 1, Y2 = Y + 1 Но если вы хотите сделать форму произвольной по картинке, тогда лучше сделать не регион, а выставить цвет прозрачности (TransparentColorKey) и включить обработку LayeredWindow (AlphaBlend) Последний раз редактировалось macomics; 25.04.2023 в 17:49. |
![]() |
![]() |
![]() |
#3 |
Разъяснятор
Пользователь
Регистрация: 21.04.2022
Сообщений: 91
|
![]() Код:
|
![]() |
![]() |
![]() |
#4 |
Разъяснятор
Пользователь
Регистрация: 21.04.2022
Сообщений: 91
|
![]()
Может быть связано с тем, что где-то по координатам я вылетаю за пределы рисунка?
* Я уже готов получить результат с грубой погрешностью, лишь отдалённо напоминающий решение. Чтобы понять общий смысл. Последний раз редактировалось hexor_boo; 25.04.2023 в 17:53. Причина: Дополнение |
![]() |
![]() |
![]() |
#5 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
![]()
Вообще, если нужно сделать именно регионами, тогда стоит вычислять прямоугольные области, а не соединять регионы по пикселю...
Вот вам работающий пример |
![]() |
![]() |
![]() |
#6 | |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
![]()
Ещё лучше создавать сразу CreatePolygonRgn по точкам 9-ти конечной звезды, а не соединять эти прямоугольные области. Ещё вы не удаляете объединённые регионы. А ещё в описании функции CombineRgn сказано, что RgnDest должен существовать до объединения.
https://learn.microsoft.com/en-us/wi...gdi-combinergn Цитата:
|
|
![]() |
![]() |
![]() |
#7 | ||
Разъяснятор
Пользователь
Регистрация: 21.04.2022
Сообщений: 91
|
![]() Цитата:
Цитата:
|
||
![]() |
![]() |
![]() |
#8 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
![]()
да
Вообще регионы это довольно медленная штука пришедшая ещё из 9х пока не появились Layered окна. Теперь все проще сделать через них. Только цвет для прозрачности выберите другой. Белый - не самый лучший выбор. Дочерние окна того же цвета тоже будут становиться прозрачными. |
![]() |
![]() |
![]() |
#9 |
Разъяснятор
Пользователь
Регистрация: 21.04.2022
Сообщений: 91
|
![]()
Ура! Задача с помощью регионов решена!
Код:
|
![]() |
![]() |
![]() |
#10 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
![]()
Вот вам ещё одна подсказка. Если сначала создадите
Код:
Код:
|
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Использование SDK (C++) в Delphi | dalx | Фриланс | 2 | 28.04.2022 00:04 |
Использование Delphi DLL в PHP коде | Adult_Master | Общие вопросы Delphi | 5 | 27.10.2015 18:17 |
Использование ЭЦП в Delphi | tarakan1983 | Общие вопросы Delphi | 3 | 30.03.2015 21:39 |
Использование библиотек в Delphi | Konstantin_V | Софт | 31 | 22.02.2010 21:59 |
HRGN сохранение-загрузка? | Comer_Jus | Общие вопросы Delphi | 5 | 21.05.2008 20:12 |