![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| TGrey |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 1.12.2007 Репутация: 1 Всего: 1 |
Здравствуйте, попробовал сделать окно формой из картинки, возник вопрос.
Код:
Вот часть кода которая проходит по картинке и создает регион. Все вроде работает, но работает в том случае если картинка в битмапе в левом верхнем углу. Если я расширяю битмап и сдвигаю картинку к правом краю, то в итоге форме получается не полной. Тоесть обрезанный рисунок битмапа. Не пойму почему оно его обрезает? |
|||
|
||||
| TGrey |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 1.12.2007 Репутация: 1 Всего: 1 |
Исправил. Нужно было поменять местами циклы Высоты и Длины.
|
|||
|
||||
| TGrey |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 1.12.2007 Репутация: 1 Всего: 1 |
А нет, все равно косо криво и не работает, как надо(
|
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
а что не так?
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| TGrey |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 1.12.2007 Репутация: 1 Всего: 1 |
Так моя последняя версия была почти такая же
Не понимаю какая разница? То что я писал брал за основу рабочий код на Делфи
Что ему в моем случае не нравится? Попробовал удалять временный регион
Тоже работает. Можете пожалуйста объяснить почему оно не корректно работает если вызывать функцию создания региона внутри комбинирования регионов. Это сообщение отредактировал(а) TGrey - 5.12.2009, 23:27 |
||||||
|
|||||||
| GremlinProg |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
в основе лежит немного другой код, в примере из делфи регион добавляется не на каждую точку, а на каждый непрозрачный диапасон точек, т.е. линиями, причем этот пример с утечкой GDI ресурсов (тот самый временный регион утечку предотвращает)
потому что переменные нужно называть понятными именами, помимо путаницы в GetPixel была путаница и в CreateRectRgn, то же самое - кордината i стояла на месте x, вместо y, а j - на месте y, вместо x (а если менять местами циклы, ошибка будет опять в GetPixel) -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
| Graf_h |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 482 Регистрация: 18.10.2007 Где: г. Ровно, Украина Репутация: нет Всего: 5 |
Это не самый лудший вариантю. Лудше использовать SetLayeredWindow. http://msdn.microsoft.com/en-us/library/ms997507.aspx
-------------------- Иногда переменная - это просто переменная |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
поддерживаю, к тому же SetLayeredWindow по ключу прозрачности будет работать намного быстрее, как он работает мы уже разбирали -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| TGrey |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 1.12.2007 Репутация: 1 Всего: 1 |
Да я почитаю, но просто хотел узнать, как с помощью регионов это делать.
Почему ошибка в циклах и пикселах?
Мой последний код, который я написал до того, как вы запостили свой отличается только тем, что нет временного региона. |
|||
|
||||
| GremlinProg |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
до того - не вижу, вижу только после... и с удалением региона, и без удаления, и с одним временным регионом - результат rg будет одинаковый, разница будет только в скорости и в наличии утечек, если результаты разные, значит проблемы в другом месте Добавлено через 7 минут и 42 секунды к примеру: если цикл выполняется не один раз в программе, т.е. формирование региона rg - динамично, а сам rg используется не только для этой картинки, то возможно упущена очистка этого региона перед циклом, очистить можно так:
Добавлено через 9 минут и 27 секунд либо регион используется для формирования региона нескольких окон, что неверно и т.п., вариантов может быть много -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
| TGrey |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 1.12.2007 Репутация: 1 Всего: 1 |
Нет регион используется 1 раз. Создается 1 раз 0 0 0 0.
После чего в цикле обрабатывается. И вот если в цикле использовать временный регион, то все нормально, а если создавать регион внутри функции объединения, то перестает работать. |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
в чем это выражается, "перестает работать": код, скриншот Добавлено через 4 минуты и 58 секунд если пикселов слишком много, и картинка строится не до конца, то утечка и дает о себе знать, т.е., по достижению определенного числа выделенных регионов, CreateRectRgn начинает возвращать NULLREGION или ERROR -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| TGrey |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 1.12.2007 Репутация: 1 Всего: 1 |
Да тогда это и есть моя ошибка. Потому что картинка действительно не до конца строится. Я закрашивай регион после объединения FillRgn и оно правую часть не дорисовывает, что я и писал в первом посте, что если картинку сдвинуть в право, то она не отображается полностью. Вот видимо лимит превышается и оно перестает создавать регионы.
Спасибо. |
|||
|
||||
| Mikl_ |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: нет Всего: 14 |
TGrey, тоже самое но на ассемблере
Присоединённый файл ( Кол-во скачиваний: 2 )
lesson45_4.rar 19,08 Kb |
|||
|
||||
| Mikl_ |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: нет Всего: 14 |
TGrey, не заинтересовал ассемблерный вариант, а зря! все на WinAPI функциях правда там, где вы пишите
LoadImage(p1,p2,p3,p4,p5,p6) в ассемблере записано push p6 push p5 push p4 push p3 push p2 push p1 call LoadImage а так должно быть все понятно во-первых оцените компактность и сравните с размером своего EXE во-вторых) в моей программе для загрузки рисунка не используется BeginPaint, CreateCompatibleBitmap, GetObject, CreateCompatibleDC, SelectObject, EndPaint а при создании окна создается кисть через CreatePatternBrush и передается в WC..hbrBackground все рисунок в окне! в-третьих) при создании региона обошелся CreateRectRgn, CombineRgn, SetWindowRgn не используется GetPixel (это скорее из-за этого рисунок прорисовывается не полностью) и FillRgn |
|||
|
||||
| DrWeb |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 78 Регистрация: 25.11.2007 Где: Украина, Донецк Репутация: нет Всего: 1 |
Вот ссылки по поводу регионов
http://www.codenet.ru/progr/visualc/regions/ http://www.codenet.ru/progr/delphi/stat/regions/ |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |