Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

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

 

  Вопрос: GDI Добавлено: 07.12.06 22:27  

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

Ответить

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

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



Вопросов: 58
Ответов: 4255
 Профиль | | #16 Добавлено: 09.12.06 17:01
И вообще, так как там зкрашено, по-моему очень трудно сделать програмно. (тени и т.д.)

В том то и фишка, что нифига трудного.. Маска и битовый сдвиг (кстати я только недавно узнал о наличии оператора >> в VB.NET, прикольная штука) А что касается теней, бликов и т.д., то там в расчете участвует такое понятие как яркость пиксела.. Так что я считаю, что задача вполне реализуема.. Надо только раздобыть коэффициенты расчета для каждого цвета отдельно..

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #17 Добавлено: 09.12.06 17:04
а маски - да.
ими это сделать можно. берёшь картинку тыкаешь в фотошопе на какой-нить пиксель пипеткой, узнаёшь код цвета, составляешь маску для картинки (программно или в том же фотошопе), потом программно накладываешь нужный цвет на исходную картинку по маске

Именно это я и пытаюсь реализовать.. Маски в данной ситуации самое то!! Единственное, что придется делать в Photoshop, так это маска.. все остальное - программно..

Ответить

Номер ответа: 18
Автор ответа:
 Champion



ICQ: 461506481 

Вопросов: 38
Ответов: 88
 Web-сайт: afhelp.in.ua
 Профиль | | #18
Добавлено: 20.12.06 08:27
видел как это делалось на флеше в одной онлайн игрушке)

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #19 Добавлено: 20.12.06 13:00
меня не интересует флэш.... только GDI+ .NET

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #20 Добавлено: 24.12.06 22:45
и все таки я сделал это!!! :-)))

Ответить

Номер ответа: 21
Автор ответа:
 gvozd



Разработчик Offline Client

Вопросов: 164
Ответов: 1317


 Web-сайт: www.gvozdsoft.com
 Профиль | | #21
Добавлено: 25.12.06 10:24
Ну расскажи как, может пригодится народу.

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #22 Добавлено: 25.12.06 23:15
если схемотично, то выглядит это примерно так:
Изначально менял цвет попиксельно.. т.е. в цикле перебирал все пикселы картинки, если координаты не попадали под маску, то менял на нужный цвет с соответствующей яркостью, иначе оставлял пиксел без изменений.. Но в этом варианте есть существенный недостаток... - жуткая тормознутость! Поэтому алгоритм пришлось переделать.. Суть сводится к следующему..
1. Блокирую участок памяти, где расположена картинка
2. Получаю указатель на первый байт этой структуры
3. Через маршаллинг копирую этот участок памяти в байтовый массив нужного размера
4. Пробегаюсь в цикле по байтам.. (А,R,G,B в случае если это 32-битная картинка с альфа каналом.. экспериментировал я с *.png) меняю нужные байты на новый цвет
5. Копирую измененный массив обратно по тому же адресу в память
6. Снимаю блокировку

Вот собственно и все.. в памяти находится измененный Bitmap, который просто берем и показываем юзеру.. При таком подходе скорость обработки изображения превышает предыдущий вариант более чем в сто раз на картинках более 200*200 пикселов, и на глаз никаких тормозов не заметно вообще.. (хотя в первом варианте на обработку небольшой картинки затрачивалось 5-7 сек)

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #23 Добавлено: 25.12.06 23:40
Если интересно, то для визуальной оценки можно скачать ехе-шник тестового проекта тут
http://slil.ru/23641422 ~960кб
(для запуска потребуется установленный Framework 2.0)

Ответить

Номер ответа: 24
Автор ответа:
 gvozd



Разработчик Offline Client

Вопросов: 164
Ответов: 1317


 Web-сайт: www.gvozdsoft.com
 Профиль | | #24
Добавлено: 26.12.06 08:54
Это тема! Круто!

Ответить

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

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



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