在XNA中着色特定颜色

时间:2013-03-20 13:42:05

标签: windows-phone-7 xna

我有一个带有白色轮廓的弹出式纹理,我希望白色轮廓根据当前主题改变颜色。

不幸的是,用我想要的色调调用SpriteBatch.Draw()会给所有非透明像素着色,而我想要的只是色调(在这种情况下),白色像素。

2 个答案:

答案 0 :(得分:2)

如何使用两个纹理;一个只包含白色边框(所有其他像素都是透明的),另一个包含弹出纹理。然后,您可以使用SpriteBatch.Draw(borderTex,borderTex.Bounds,tintColor)将色调应用于边框纹理,并执行额外的SpriteBatch.Draw(tex,tex.Bounds,Color.White)以在结果顶部显示弹出纹理。这样做的好处是你的绘图操作不受CPU限制(就像你发布的解决方案一样),因为SpriteBatch可以利用你的GraphicsDevice(GPU)。

答案 1 :(得分:0)

所以我最终这样做了,尽管效率不高。值得庆幸的是,我只在LoadContent()期间执行过一次。

texture = content.Load<Texture2D>("popup");
Color[] colors = new Color[texture.Width * texture.Height];
texture.GetData(colors);
for (int i = 0; i < colors.Length; i++)
{
    if (colors[i] == Color.White)
    {
        colors[i] = PhoneTheme.Current.PhoneAccentColor;
    }
}
texture.SetData(colors);