我们需要BlendState作为以下内容:
Color.White
按原样绘制PNG 要获得此效果,BlendState.AlphaBlend
已关闭,但如果我们将alpha设置为100或任何255以外的数字,则将白色绘制为透明部分。
所以我们尝试了这个:
_blendState = new BlendState();
_blendState.AlphaSourceBlend = Blend.SourceAlpha;
_blendState.AlphaDestinationBlend = Blend.InverseSourceAlpha;
_blendState.ColorSourceBlend = Blend.SourceAlpha;
_blendState.ColorDestinationBlend = Blend.InverseSourceAlpha;
这是有效的,但如果两个PNG在彼此之上,我们现在会得到不希望的效果。基本上我们得到一些奇怪的线条,看起来像是添加了像素数据(或其他东西)。
示例:
实际上,BlendState.AlphaBlend
就是这样:
_blendState = new BlendState();
_blendState.AlphaSourceBlend = Blend.SourceAlpha;
_blendState.AlphaDestinationBlend = Blend.InverseSourceAlpha;
_blendState.ColorSourceBlend = Blend.One;
_blendState.ColorDestinationBlend = Blend.InverseSourceAlpha;
图片看起来比上面好:
但是然后alpha不起作用,使用100作为alpha将用白色替换背景。
我们应该使用什么BlendState
来从SpriteBatch获得我们想要的效果?我们可以使用不同的颜色,例如Color.Black
,还有另一种方法可以让它发挥作用。
* PS - 另一个不错的功能是如果我们可以使用Color.Red
来“修饰”纹理,但我们希望它首先工作。
答案 0 :(得分:1)
尝试为内容项目中的.png设置premultipliedAlpha
至false
。
很遗憾,我不知道在使用Texture2d.FromStream()
时如何解决此问题。