Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: WinAPI ExtFloodFill Добавлено: 14.03.09 13:39  

Автор вопроса:  diplay

Ответить

  Ответы Всего ответов: 45  

Номер ответа: 31
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #31
Добавлено: 19.03.09 13:40
у меня есть битмап с прозрачным фоном, который я отрисовываю на контроле черного цвета(цвет фона контрола в моей проге можно менять)прикол в том что я вначале на контроле рисую координтную сетку а потом сверху еще битмап с прозрачным фоном. А после заливки прозрачный фон превращается в серый и за ним не видно координатной сетки и цвет фона контрола

Заметь, что твоя задача в посте #16 в корне отличается от первоначальной постановки вопроса. Конечно же, предложенные тебе советы не подойдут для решения новой постановки задачи. По-моему все ты можешь сделать гораздо проще. Открою секрет: у bitmap не бывает прозрачного цвета - прозрачным ты можешь назначить любой цвет картинки, зная скажем координаты точки с этим цветом или просто решив, что едко-розовый будем считать прозрачным. Дальше так. На контроле, который ты заливаешь нужным цветом и на который накладываешь (рисованием) сетку, сверху укладываешь оконный контрол с картинкой, в котором один из цветов (ты знаешь, какой именно) делаешь прозрачным. Это делается при помощи функции SetLayeredWindowAttributes с ключом LMA_COLORKEY.
  1. SetLayeredWindowAttributes(hWnd,colorrefTransparent,0,LMA_COLORKEY)

Ответить

Номер ответа: 32
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #32 Добавлено: 19.03.09 13:42
mc-black пишет:
Открою секрет: у bitmap не бывает прозрачного цвета

в net класс Bitmap поддерживает alpha-канал.

Ответить

Номер ответа: 33
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #33
Добавлено: 19.03.09 14:57
Bitmap Bitmap'у рознь. Я ошибочно предполагал структуру данных Bitmap в gdi32. Имхо, нечего в системе, работающей на GDIplus использовать gdi32 API, т.к. в gdi32 не была реализована нормальная работа с альфа-каналом. Может быть ExtFloodFill залазит на область с альфа == 0x00h и перекрашивает и ее. Я не знаток FW, но вроде там встроенных средств хватит с лихвой, делать это по .NET'овски.

Ответить

Номер ответа: 34
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #34 Добавлено: 19.03.09 15:46
mc-black пишет:
Я не знаток FW, но вроде там встроенных средств хватит с лихвой, делать это по .NET'овски.

да, на самом деле там достаточно всяких средств, но не в этом случае.. Ему,по сути, надо реализовать заливку произвольного участка изображения ограниченную контуром определенным цветом. Этого функционала в net не предусмотрено AFAIK. Поэтому он вынужден извращаться с api.. Я тоже не сторонник этого метода,но у него нет выхода. Единственный вариант что он может сделать чтобы не дергать api, это написать свой алгоритм (к примеру волной) определения области заливки исходя из заданного цвета начального пиксела. Но скорость,сам понимаешь, будет невысокой..

Ответить

Номер ответа: 35
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #35 Добавлено: 19.03.09 19:48
Есть алго создающий комбайнрегион по указанному цвету битмапа.
Не сверхбыстрый конечно, на апи и вб6.
По комбайнрегиону можно былобы солидбрашем.
Господа автор явно и не расчитывает на настоящую прозрачность 32х бит.

Ответить

Номер ответа: 36
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #36 Добавлено: 19.03.09 20:23
http://www.codeproject.com/KB/GDI-plus/floodfillincsharp.aspx

Ответить

Номер ответа: 37
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #37 Добавлено: 19.03.09 21:54
Медитируем на http://www.codeproject.com/KB/GDI-plus/QuickFillNET.aspx

"к примеру волной" не покатит потому что получите переполнение стека на картинке, которая больше чем ноготь.

Ответить

Номер ответа: 38
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #38
Добавлено: 19.03.09 22:10
получите переполнение стека

я так понимаю из-за рекурсии? а реализация циклом возможно слишком много воды будет переливать.

Ответить

Номер ответа: 39
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #39 Добавлено: 19.03.09 22:43
Да, из-за рекурсии.

По указанной ссылке можно рассмотреть пример решения данной задачи.

Ответить

Номер ответа: 40
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #40 Добавлено: 19.03.09 22:58
Steel Brand пишет:
Медитируем на http://www.codeproject.com/KB/GDI-plus/QuickFillNET.aspx

ты видимо пошутил?
Во первых он осилит код на С++, а во вторых, если я ничего не путаю, VB не поодерживает указатели

Ответить

Номер ответа: 41
Автор ответа:
 diplay



Вопросов: 4
Ответов: 69
 Профиль | | #41 Добавлено: 21.03.09 22:26
я пробовал сделать рекурсивную заливку своими руками, но чё-то перемудрил и ничего толкового не вышло, да еще и тормозило ппц. В общем, спасибо всем за советы, но я все-таки остановлюсь на своем варианте - хоть и неправильно с точки зрения таких крутых программистов, как вы, но зато дает желаемый результат.

PS
он осилит код на С++

Я как раз на днях начал потихоньку учить С++. Скачал книгу С++ для чайников и читаю на досуге. Автор все пишет предельно просто, так что даже мозг включать не приходится - читаешь как худежественную литературу. Когда добью, прочитаю что-нибудь по-серьезней.

Ответить

Номер ответа: 42
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #42 Добавлено: 22.03.09 00:20
diplay, да, С++ штука еще та, затягивает сильно.

У меня знакомый на С++ так подсел что от дотнета даже отказался, уже не верю что он когда-нибудь вернется на .NET :(

Ответить

Номер ответа: 43
Автор ответа:
 diplay



Вопросов: 4
Ответов: 69
 Профиль | | #43 Добавлено: 22.03.09 14:05
от дотнета даже отказался

я от дотнета не откажусь. Как-никак я ведь с него начинал еще когда учился во втором классе, так что он мне как родной.

Ответить

Номер ответа: 44
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #44
Добавлено: 22.03.09 23:29
diplay, а что тебя уже в третий класс перевели? o_O :)

Ответить

Номер ответа: 45
Автор ответа:
 diplay



Вопросов: 4
Ответов: 69
 Профиль | | #45 Добавлено: 24.03.09 19:01
нет, в девятый)

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам