Обработка 2д картинки

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Обработка 2д картинки

Сообщение Mikle » 29.03.2015 (Вс) 11:53

Чуть позже.

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Обработка 2д картинки

Сообщение Don Leno » 29.03.2015 (Вс) 12:02

Спасибо Mikle. Кстати у тебя такие хорошие высокоточные расчеты, мне это нравиться - точность.
У меня будет один(два) вопроса (я создам тему), там мне оч нужна точность, потому как мои расчеты неверны и там необходимо использовать по моему синус и косинус для вычислений, только я не понимаю как их правильно внедрить. Надеюсь ты посмотришь и поможешь мне с расчетами)))

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Обработка 2д картинки

Сообщение Mikle » 01.04.2015 (Ср) 17:23

Вот теперь, вроде бы, без ошибок.
Я стал считать все углы, как и положено, от экватора, а не от полюса, в результате арккосинус заменён на арксинус.
Размер исходной текстуры можно менять (должно соответствовать размеру картинки в файле). Так же можно менять размер полученной картинки.
Так что твоя задача перевыполнена:
Don Leno писал(а):Я хочу позже подогнать функцию чтобы она работала с текстурами любых размеров

Мне было проще написать самому, чем объяснять что и почему :)
У вас нет доступа для просмотра вложений в этом сообщении.

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Обработка 2д картинки

Сообщение Don Leno » 01.04.2015 (Ср) 21:21

Mikle, огромное тебе спс!! Под любую текстуру да еще и с возможостью изменения скорости!! Это то что мне надо!

Появился еще один вопрос: Я создаю Dc через CreateCompatibleDC и передаю для обработки и создания уже готового изображения, но только вот потом я беру содержимое Dc и заношу в Пиктуребокс. Но в нем показывает лишь черный квадрат?! Что не так?

Кстати твой проект - если в нем поставить AutoRedraw=True, то планета не рисуется. Почему?

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Обработка 2д картинки

Сообщение Mikle » 02.04.2015 (Чт) 9:35

Don Leno писал(а):Кстати твой проект - если в нем поставить AutoRedraw=True, то планета не рисуется. Почему?

При включенном AutoRedraw ты рисуешь в задний буфер, покажи его, добавив после PaintToDevice hDC, Back, ESz, ESz команду Refresh.
Но быстродействие будет немного ниже, лучше без AutoRedraw.
Don Leno писал(а):Я создаю Dc через CreateCompatibleDC и передаю для обработки и создания уже готового изображения

Что это значит? Ты направляешь SetDIBitsToDevice в созданное устройство? И, главное, зачем всё это?

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Обработка 2д картинки

Сообщение Don Leno » 02.04.2015 (Чт) 10:43

Чтобы планета на космическом фоне была с прозрачным фоном. Я "направляю SetDIBits" в DC потом вытаскиваю и уже копирую с прозрачным фоном на главный Пиктуребокс. К сожалению, ничего не получается из-за того что SetDIBits не рисует планету в созданом DC! Как это исправить?

И кстати у меня AutoRedraw=True. Поставил рефреш не решило траблы (((

Самое интересное, если я рисую сразу в пиктуребокс - то все норм, но нет прозрачного фона. А если в созданый DC - то блин черный квадрат!?

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Обработка 2д картинки

Сообщение Mikle » 02.04.2015 (Чт) 13:56

Вот с рисованием в DC, всё работает.
У вас нет доступа для просмотра вложений в этом сообщении.

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Обработка 2д картинки

Сообщение Don Leno » 02.04.2015 (Чт) 14:00

Что делает CreateDIBSection? Мож объяснить?

СПС!!!! ВСЕ РАБОТАЕТ!!!

goldexer
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 07.07.2013 (Вс) 17:11

Re: Обработка 2д картинки

Сообщение goldexer » 28.07.2016 (Чт) 0:17

Хм, куда ни плюнь - автоматом попадаешь в сообщество некрофилов, как-то давненько не пишут в этом разделе...

Вообще, если планета нужна маленькая, как у автора 128*128 пикселей, то можно и так:
1 - Качаем и устанавливаем 87мб архив 3D Max 7. Седьмой, потому что от начала скачивания до уже открытого окна ~5мин
2 - Если нужна планета: делаем сферу с делением, например 64, чтобы ребра не торчали. Кидаем на неё текстуру из нескольких поставляемых в комплекте
2 - Если нужен астероид: снова сфера с двумя модификаторами Noise - формирующий и детализирующий и накидываем текстуру
3 - (Если нужен просто прозрачный цвет - убираем перед рендером сглаживание) рендерим через кадр, т.е. сокращаем до 180 кадров на круг. Затем текстуре назначаем самосвечение белым цветом и белый Difuse, снова рендерим на черном фоне и получаем маску.
4 - Объединяем кадры программой SpriteJoin в длинные полосы и объединяем полосы в одну картинку с кучей кадров.
5 - Применяем маску либо в фотошопе/пейнт.нет'е для получения png с полупрозрачностью, либо уже в алгоритме вывода планеты на экран. Можно ещё в гифку собрать, как вам угодно. (Всё,разумеется в png-формате, он отлично сожмет всю эту бадягу)

Всё вышеописанное можно проделать минут за 20 максимум и результат будет чуть лучше на вид и не столь прожорлив к памяти.
Может кому пригодится. Я, так астероиды к игре делал. Рендерим например SpriteCraft'ом. Умеет работать с png и может использовать DirectX и OpenGL на ваш выбор, настраиваемый FPS сократит нагрузку до минимума, а использование этого движка сократит время разработки до нескольких строк в VB.

Ну, а можно и всё самому - ручками, ручками...


Не прожорлив к памяти: имеется ввиду для небольших анимаций и не для большого их количества расход памяти напрягать не должен. Если уже много лет, как такие анимации гифками передают на интернет страницы, а расход трафика (которого выдается меньше, чем оперативы) не напрягает, то в приоритете скорости создания при малом опыте программирования математических алгоритмов - пойдет.
Последний раз редактировалось goldexer 10.08.2016 (Ср) 18:44, всего редактировалось 1 раз.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Обработка 2д картинки

Сообщение Mikle » 28.07.2016 (Чт) 10:33

goldexer писал(а):и не столь прожорлив к памяти.

Вот как раз памяти будет расходоваться значительно больше.

Teranas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 224
Зарегистрирован: 13.12.2008 (Сб) 4:26
Откуда: Новосибирск

Re: Обработка 2д картинки

Сообщение Teranas » 05.05.2017 (Пт) 1:36

Mikle
Как с помощью SR2D перевести картинку в оттенки серого.
Есть такая возможность?
А то не тянет ещё одну длл-ку прикручивать.
С уважением, Андрей.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Обработка 2д картинки

Сообщение Mikle » 05.05.2017 (Пт) 18:22

Можно двумя строчками - MulAddS2X и DrawDPBM, подробнее смогу показать или сегодня вечером, или уже завтра утром.

Teranas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 224
Зарегистрирован: 13.12.2008 (Сб) 4:26
Откуда: Новосибирск

Re: Обработка 2д картинки

Сообщение Teranas » 05.05.2017 (Пт) 19:52

Mikle писал(а):Можно двумя строчками - MulAddS2X и DrawDPBM, подробнее смогу показать или сегодня вечером, или уже завтра утром.

Буду признателен.
С уважением, Андрей.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Обработка 2д картинки

Сообщение Mikle » 06.05.2017 (Сб) 9:17

Вот:
Код: Выделить всё
  Spr.MulAddS2X Spr, 0, 0, ARGB(0, 64, 64, 64), ARGB(0, 192, 192, 192)
  Spr.DrawDPBM Spr, 0, 0, 77, 150, 28, 0.675

Спрайт становится чёрно-белым. Немного теряется точность (+-1), это потому, что DrawDPBM работает со знаковым байтом, то есть приходится переводить диапазон значений от 0..255 к 128..255, что и делает MulAddS2X.

Пред.

Вернуться в Мультимедиа

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 37

    TopList