|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
25.04.2023, 17:29 | #1 |
Разъяснятор
Форумчанин
Регистрация: 21.04.2022
Сообщений: 126
|
Delphi 7 : Использование hRgn
Есть изображение 9-конечной звезды на белом фоне (изображение прикрепляю). Нужно сделать из неё регион и обрезать по ней форму.
Такой код не работает: Код:
Код:
|
25.04.2023, 17:46 | #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. |
25.04.2023, 17:50 | #3 |
Разъяснятор
Форумчанин
Регистрация: 21.04.2022
Сообщений: 126
|
Код:
|
25.04.2023, 17:51 | #4 |
Разъяснятор
Форумчанин
Регистрация: 21.04.2022
Сообщений: 126
|
Может быть связано с тем, что где-то по координатам я вылетаю за пределы рисунка?
* Я уже готов получить результат с грубой погрешностью, лишь отдалённо напоминающий решение. Чтобы понять общий смысл. Последний раз редактировалось hexor_boo; 25.04.2023 в 17:53. Причина: Дополнение |
25.04.2023, 18:02 | #5 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
Вообще, если нужно сделать именно регионами, тогда стоит вычислять прямоугольные области, а не соединять регионы по пикселю...
Вот вам работающий пример |
25.04.2023, 18:16 | #6 | |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
Ещё лучше создавать сразу CreatePolygonRgn по точкам 9-ти конечной звезды, а не соединять эти прямоугольные области. Ещё вы не удаляете объединённые регионы. А ещё в описании функции CombineRgn сказано, что RgnDest должен существовать до объединения.
https://learn.microsoft.com/en-us/wi...gdi-combinergn Цитата:
|
|
25.04.2023, 18:27 | #7 | ||
Разъяснятор
Форумчанин
Регистрация: 21.04.2022
Сообщений: 126
|
Цитата:
Цитата:
|
||
25.04.2023, 18:31 | #8 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
да
Вообще регионы это довольно медленная штука пришедшая ещё из 9х пока не появились Layered окна. Теперь все проще сделать через них. Только цвет для прозрачности выберите другой. Белый - не самый лучший выбор. Дочерние окна того же цвета тоже будут становиться прозрачными. |
25.04.2023, 19:43 | #9 |
Разъяснятор
Форумчанин
Регистрация: 21.04.2022
Сообщений: 126
|
Ура! Задача с помощью регионов решена!
Код:
|
25.04.2023, 20:01 | #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 |