0

我正在使用 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 颜色不会显示在屏幕上,这就是你创建透明度的方式。

这在大多数情况下都有效,但会在我的图像和图片边缘留下一条粉红色的线。经过反复试验,我发现如果我回到 Photoshop,我可以通过用粉红色绘制来消除粉红色框。这可以通过左侧的船只看到。

我开始认为 Photoshop 正在混合图像的边缘,因此尽管我没有证据,但背景并不是完全一样的粉红色阴影。在此处输入图像描述

任何人都可以通过编程来帮助解决这个问题还是图像中的错误?

如果有人擅长 Photoshop,他们可以告诉我如何修复图像,我主要使用 png,但如有必要愿意更改。

编辑:按要求创建纹理代码

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

3 回答 3

1

您正在加载一个 BMP 图像,该图像本身不支持透明度 - 最后一个参数D3DCOLOR_XRGB(255,0,255)用于为没有任何透明度的图像添加透明度。问题是颜色必须完全匹配,即使只有一个颜色也不会被转换为透明,您会看到近乎洋红色的颜色。

将您的图像保存为具有透明度的 24 位 PNG,如果您正确加载它们,则不会有任何问题。也不要在保存之前添加洋红色背景。

于 2011-06-16T14:40:00.390 回答
0

Photoshop 正在对图像的边缘进行抗锯齿处理。如果它确定一个像素的 30% 在图像内部,而 70% 在外部,它会将那个像素的 alpha 值设置为 70%。这比使用基于像素的透明蒙版提供了更平滑的结果。你似乎把这些阿尔法值扔掉了,对吗?粉红色可能来自 Photoshop 显示部分透明像素的方式。

于 2011-06-16T13:05:39.053 回答
0

由于您已经使用 PNG,您可以直接从 Photoshop 将 alpha 值存储在那里。PNG支持开箱即用的透明度,它可以提供比透明颜色更好的外观。

它在http://www.toymaker.info/Games/html/textures.html中有描述(例如)。

于 2011-06-16T12:32:50.430 回答