Страница: 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-сайт:
Профиль | | #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-сайт:
Профиль | | #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-сайт:
Профиль | | #24
Добавлено: 26.12.06 08:54
Это тема! Круто!