-
Здравствуйте! Делаю маленькую игрушку на курсовой проект. Проблема следующего рода: коряво рисуется спрайт. Спрайт делаю в 3D Max, сохраняю в bmp. В Photoshop с помощью волшебной палочки заливаю фон черным, сам спрайт - белым. Рисую на канве, как показано в статье "Работа со спрайтами": функцией BitBlt сначала вывожу маску с параметром SrcPaint, а затем в тоже место сам спрайт с параметром SrcAnd. В результате получаю спрайт, вокруг которого видна обводка примерно в 1-2 пикселя. Весьма некрасиво. Пробовал при заливке фона черным на маске делать дополнительную накидку в 1 пиксель, тогда при отрисовке в программе контура нет, но и границы изображения тогда портятся - мелкие детали на краях пропадают. Как тогда по другому можно вывести спрайт, чтобы нормально смотрелось?
-
спрайт нужно сохранять без сглаживания, т.е. границы должны быть резкие, сразу переходить в "прозрачный" цвет, "накинув" пиксель на контур будет "огрызок". Либо спрайт использовать с маской-альфаканалом (или битмап 32 битный).
-
Но когда я сохраняю из 3dmax в bmp то там нет параметра сглаживания... А как в плане кода будет выглядеть наложение маски с альфа-каналом? Я в нете чего-то не нашел
-
поставь для маски PixelFormat:=pf1bit; это уберет соседние цвета
(маску делай так, белым-то что останется, черным то что обреется) нарисуй маску на спрайте - BitBlt(...,SRCand); затем перерисуй маску BitBlt(...,DSTINVERT);
это проделываешь один раз, а теперь все как описано.. при таком подходе на спрайте за фон можно не беспокоится
-
А если у меня один битмап, в котором лежит и спрайт и маска? Как тогда быть с PixelFormat?
-
CopyRect?
-
нет, не copyrect
-
А вот да. Как вывести картинку по маске ?
То есть не спрайт, у которого по умолчанию фон белый, а маска на соответсвующих местах черная (для BitBlt, или как там ее), или существует транспарент-цвет, а просто обычную картинку - там где точка "наложенной" маски есть, выводить точку картинки, а где нет - не выводить.
И без прямого доступа к пикселям...
Есть нужные функции ? желательн GDI.. или что там за GDI+...
-
"Студент (13.11.08 13:35) [2] Но когда я сохраняю из 3dmax в bmp то там нет параметра сглаживания..."
Там такое, кстати, - есть - а именно Antialiasing в настройках scanline рендера (пониже там). Была где-то хорошая статья, где описывались варианты сглаживания, их там много... пожестче на границах вроде был Catmull-romm или как его там... А вообще для твоего случая лучшим был какой-то другой...
-
Как вывести картинку по маске
MaskBlt? Или AlphaBlend, если отконвертировать маску в альфа-канал.
|