Быстрое создание региона?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Mleha
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 146
Зарегистрирован: 06.10.2004 (Ср) 7:49
Откуда: Ангарск

Быстрое создание региона?

Сообщение Mleha » 13.11.2004 (Сб) 11:34

Стандартная фунуция рабтает долго для больших форм, можно как нибудь ускорить процесс Transparenta?
Вложения
mdlrgn.zip
(776 байт) Скачиваний: 228

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 13.11.2004 (Сб) 11:41

Можно - заменой GetPixel на прямое чтение из битмапа. Но это ускорение на проценты. Чтобы ускорение было заметно, надо придумывать новый алгоритм.
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 14.11.2004 (Вс) 18:19

Вот, сел разобраться...
В примере по меньшей мере три ошибки:
1. Function ApplySk не возвращает значение - её надо было объявить как Sub
2. BorderStyle у формы read-only в рантайме - ApplySk же его пытается изменить.
3. Регион нельзя удалять после того, как он был задан окну.

Сейчас попытаюсь написать пример получше...
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 14.11.2004 (Вс) 18:55

На самом деле, разница получилась в два раза :-)

Rgn_0 - исходный пример с исправленными ошибками.
Rgn_1 - пример чтения данных битмапа.
Вложения
Rgn.zip
(18.36 Кб) Скачиваний: 289
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 14.11.2004 (Вс) 19:17

Мож извратиться в том смысле, что сделать beginpath, искать границу видимой области, "набирать" её через lineto, потом endpath и в регион его одной командой? :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 14.11.2004 (Вс) 21:46

Имхо замаешься с дырками - где у них "нутрь", а где "наружа".
И, учитывая что все линии всё равно получатся длиной 1 пиксел, вряд ли это окажется быстрее.

Я бы - если скин статичный - дома у себя просчитал нужный регион, сохранил бы куда-нибудь по GetRegionData, и создавал сразу готовый по ExtCreateRegion.

Когда я писал свою заскиненную вусмерть прогу, у меня она, пока загружалась, обсчитывала все нужные регионы, рассовывала их по массивам, и потом только подставляла нужные (там скин был полу-динамический, т.е. форма окна со временем менялась заранее известным образом).
Изображение

Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Сообщение Kepmann » 14.07.2005 (Чт) 16:34

Толи торможу от работы длительной, то ли хрен знает...

Какой цвет прога делает прозрачным? Че-то скачал семпл, вкорячил свою картинку - не работает.. 8(

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 14.07.2005 (Чт) 20:14

Заданный параметром lBackColor
Конкретно в этом сэмпле - RGB(239, 239, 239)
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing-бот и гости: 100

    TopList