輪郭が白いポップアップテクスチャがありますが、現在のテーマに合わせて白い輪郭の色を変えてほしいです。
残念ながら、SpriteBatch.Draw()
色合いを使用して呼び出すと、すべての不透明なピクセルに色合いが付けられますが、必要なのは、(この場合は)白いピクセルだけに色合いを付けることです。
輪郭が白いポップアップテクスチャがありますが、現在のテーマに合わせて白い輪郭の色を変えてほしいです。
残念ながら、SpriteBatch.Draw()
色合いを使用して呼び出すと、すべての不透明なピクセルに色合いが付けられますが、必要なのは、(この場合は)白いピクセルだけに色合いを付けることです。
2つのテクスチャを使用するのはどうですか。1つは白い境界線のみを含み(他のすべてのピクセルは透明です)、もう1つはポップアップテクスチャを含みます。次に、を使用して境界線テクスチャに色合いを適用しSpriteBatch.Draw(borderTex,borderTex.Bounds,tintColor)
、追加を実行してSpriteBatch.Draw(tex,tex.Bounds,Color.White)
、結果の上にポップアップテクスチャをブリットすることができます。これの利点は、SpriteBatchがGraphicsDevice(GPU)を利用できるため、描画操作がCPUに依存しないことです(投稿したソリューションのように)。
ですから、それほど効率的ではありませんが、私はこの方法でそれを行うことになりました。ありがたいことに、私はそれを一度だけ、そして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);