我有一个带有白色轮廓的弹出式纹理,我希望白色轮廓根据当前主题改变颜色。
不幸的是,用我想要的色调调用SpriteBatch.Draw()
会给所有非透明像素着色,而我想要的只是色调(在这种情况下),白色像素。
答案 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);