1

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

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

4

2 回答 2

2

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

于 2013-03-20T17:24:37.527 回答
0

So I ended up doing it this way, even though it's not that efficient. Thankfully I do it only once and during the 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);
于 2013-03-20T14:12:49.443 回答