Я хотел создать полупрозрачный оверлей для своего экрана и решил динамически создать пользовательский объект Texture2D
, используя следующий код:
const int TEX_WIDTH = 640;
const int TEX_HEIGHT = 480
Texture2D redScreen;
void GenerateTextures(GraphicsDevice device)
{
redScreen = new Texture2D(device, TEX_WIDTH, TEX_HEIGHT);
uint[] red = new uint[TEX_WIDTH * TEX_HEIGHT];
for (int i = 0; i < TEX_WIDTH * TEX_HEIGHT; i++)
red[i] = 0x1A0000ff;
redScreen.SetData<uint>(red);
}
И, похоже, он не работает какожидается!Глядя на этот код, я ожидаю, что значение альфа будет около 10%.(0x1A / 0xFF = ~ 10)
но в итоге получается гораздо больше.Мне кажется, что uint
представляет значение ARGB, но значение прозрачности никогда не будет таким, каким я его установил.это либо «несколько прозрачно», либо совсем не прозрачно.
Я не люблю задавать смутные вопросы, Но что я делаю не так?что не так с этим фрагментом кода?
Редактировать: В конце концов, я мог получить желаемые результаты только установив BlendState.NonPremultiplied
в вызове spriteBatch.Begin()
.