【发布时间】:2011-07-17 06:20:03
【问题描述】:
我有用于计算像素不透明度的 C# 代码,它用于 XNA,如何提高它的性能?
public static uint GetPixelForOpacity(uint pixelBackground, uint pixelForeground, uint pixelCanvasAlpha)
{
byte surfaceR = (byte)((pixelForeground & 0x00FF0000) >> 16);
byte surfaceG = (byte)((pixelForeground & 0x0000FF00) >> 8);
byte surfaceB = (byte)((pixelForeground & 0x000000FF));
byte sourceR = (byte)((pixelBackground & 0x00FF0000) >> 16);
byte sourceG = (byte)((pixelBackground & 0x0000FF00) >> 8);
byte sourceB = (byte)((pixelBackground & 0x000000FF));
uint newR = sourceR * pixelCanvasAlpha / 256 + surfaceR * (255 - pixelCanvasAlpha) / 256;
uint newG = sourceG * pixelCanvasAlpha / 256 + surfaceG * (255 - pixelCanvasAlpha) / 256;
uint newB = sourceB * pixelCanvasAlpha / 256 + surfaceB * (255 - pixelCanvasAlpha) / 256;
return (uint)255 << 24 | newR << 16 | newG << 8 | newB;
}
【问题讨论】:
-
根据背景和前景像素计算不透明度像素。
-
我明白了。为什么不使用 XNA 中内置的 AlphaBlendEnable? msdn.microsoft.com/en-us/library/…
-
我使用自定义的 BlendState() 来达到我的目的。现在只在前景图像上设置 Alpha。性能很棒。感谢 Jonas 提供非常好的建议。我是 XNA 的新手。
标签: c# .net performance optimization xna