2013-03-20 3 views
1

У меня есть всплывающая текстура, которая имеет белый контур, и мне бы хотелось, чтобы белый контур изменил цвет в соответствии с текущей темой.Оттенок определенного цвета в XNA

К сожалению, при вызове SpriteBatch.Draw() с оттенком я хочу, чтобы все непрозрачные пиксели, а то, что я хочу, - это только оттенок (в данном случае), белые пиксели.

+3

проверить это http://stackoverflow.com/questions/3255311/color-replacement-in-xna-c-sharp –

ответ

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); 
+0

Может быть, вы должны использовать белый цвет для тех акцентных зон, а затем тонировать всю текстуру с телефона, так цвет акцента, с помощью метода 'spriteBatch.Draw (t2d, rect, color)'? – user1306322

+0

Как я уже сказал, 'spriteBatch.Draw (t2d, rect, color)' также окрашивает не белые пиксели, что дает нежелательный эффект. –

+0

Я имел в виду разделение текстуры на две текстуры, одна из которых никогда не тонирована, а вы оттеняете другую. – user1306322

2

Как об использовании двух текстур; один, который содержит только белую границу (все остальные пиксели прозрачны), и тот, который содержит всплывающую текстуру. Затем вы можете просто применить оттенок к текстуре границы с помощью SpriteBatch.Draw(borderTex,borderTex.Bounds,tintColor) и выполнить дополнительный SpriteBatch.Draw(tex,tex.Bounds,Color.White), чтобы разбить всплывающую текстуру поверх результата. Преимущество этого заключается в том, что операция рисования не связана с ЦП (например, решение, которое вы отправили), поскольку SpriteBatch может использовать ваш GraphicsDevice (GPU).

+0

Я как бы ограниченный бюджет, когда дело доходит до добавления большего количества текстур, но я буду помнить об этом на всякий случай, спасибо. –

Смежные вопросы