прозрачный цвет, показываемый иногда - PullRequest
0 голосов
/ 16 июня 2011

Я использую LPDIRECT3DTEXTURE9 для хранения моего изображения.

Эта функция используется для отображения моего изображения.

int drawcharacter(SPRITE& person, LPDIRECT3DTEXTURE9& image)
{
position.x = (float)person.x;
position.y = (float)person.y;
sprite_handler->Draw(
image, 
&srcRect,
NULL,
&position,
D3DCOLOR_XRGB(255,255,255));
return 0;
}

В соответствии с книгой, цвет RGB показан какПоследний параметр не будет отображаться на экране, так вы создадите прозрачность.

Это работает по большей части, но оставляет розовую линию вокруг моего изображения и края изображения.После проб и ошибок я обнаружил, что если я вернусь в фотошоп, я могу убрать розовую рамку, нарисовав ее розовым цветом.Это можно увидеть на кораблях слева.

Я начинаю думать, что фотошоп смешивает края изображения так, что фон не все того же оттенка розового, хотя у меня нет доказательств. enter image description here

Может кто-нибудь помочь исправить это с помощью программирования или ошибка в изображении?

Если кто-то хорошо разбирается в фотошопе, могут ли они сказать мне, как исправить изображение, я в основном использую png, но яготовы изменить при необходимости.

edit: код создания текстуры по запросу

    character_image = LoadTexture("character.bmp", D3DCOLOR_XRGB(255,0,255));
if (character_image == NULL)
    return 0;

Ответы [ 3 ]

1 голос
/ 16 июня 2011

Вы загружаете изображение BMP, которое изначально не поддерживает прозрачность - последний параметр D3DCOLOR_XRGB(255,0,255) используется для добавления прозрачности к изображению, у которого его нет. Проблема в том, что цвет должен точно совпадать, если он выключен даже одним, он не будет преобразован в прозрачный, и вы увидите, что почти пурпурный свет просвечивает.

Сохраняйте изображения в формате 24-битного PNG с прозрачностью, и если вы загрузите их правильно, проблем не будет. Также не добавляйте пурпурный фон перед сохранением.

0 голосов
/ 16 июня 2011

Photoshop сглаживает края изображения. Если он определяет, что 30% пикселя находится внутри изображения, а 70% - снаружи, он устанавливает альфа-значение для этого пикселя равным 70%. Это дает гораздо более плавный результат, чем использование маски прозрачности на основе пикселей. Вы, кажется, выбрасываете эти альфа-значения, верно? Розовый цвет, по-видимому, исходит из того, как Photoshop отображает частично прозрачные пиксели.

0 голосов
/ 16 июня 2011

Поскольку вы уже используете PNG, вы можете просто сохранить альфа-значение прямо из Photoshop. PNG поддерживает прозрачность из коробки, и он может дать лучший внешний вид, чем то, что вы получаете с прозрачным цветом.

Это описано в http://www.toymaker.info/Games/html/textures.html (например).

...