Actually Texture2D.FromStream behaved differently on different backends in MG 3.6. As far as I remember it premultiplied alpha with Monogame.Windows and didnt premultiply it with Monogame.DesktopGL. Unsure about other backends.
Now Texture2D.FromStream should have same behaviour on all backends starting from MG 3.7: the alpha is not premultiplied.
Those who are used to the old behavior have two solutions:
1. Use BlendState.NonPremultiplied(as it was said above).
2. Premultiply alpha manually after the loading. I.e. with the following code:
private static byte ApplyAlpha(byte color, byte alpha)
var fc = color / 255.0f;
var fa = alpha / 255.0f;
var fr = (int)(255.0f * fc * fa);
if (fr < 0)
fr = 0;
if (fr > 255)
fr = 255;
public static void PremultiplyAlpha(Texture2D texture)
Color data = new Color[texture.Width * texture.Height];
for (int i = 0; i < data.Length; ++i)
byte a = data[i].A;
data[i].R = ApplyAlpha(data[i].R, a);
data[i].G = ApplyAlpha(data[i].G, a);
data[i].B = ApplyAlpha(data[i].B, a);
This way you can keep using default BlendState.AlphaBlend.