C# 从MemoryStream加载时位图中没有透明度
当我将C# 从MemoryStream加载时位图中没有透明度,c#,bitmap,memorystream,C#,Bitmap,Memorystream,当我将位图写入文件并从文件中读取时,我获得的透明度是正确的 使用(位图bmp=新位图(2,2)) { Color col=Color.FromArgb(1,2,3,4); bmp.SetPixel(0,0,col); bmp.Save(“J.bmp”); } 使用(位图bmp=新位图(“J.bmp”)) { Color col=bmp.GetPixel(0,0); //列A的值=1。这是正确的。 } 但是如果我将位图写入内存流并从该内存流读取,则透明度已被移除。所有alpha值变为255 Me
位图
写入文件并从文件中读取时,我获得的透明度是正确的
使用(位图bmp=新位图(2,2))
{
Color col=Color.FromArgb(1,2,3,4);
bmp.SetPixel(0,0,col);
bmp.Save(“J.bmp”);
}
使用(位图bmp=新位图(“J.bmp”))
{
Color col=bmp.GetPixel(0,0);
//列A的值=1。这是正确的。
}
但是如果我将位图
写入内存流
并从该内存流
读取,则透明度已被移除。所有alpha值变为255
MemoryStream ms=newmemoryStream();
使用(位图bmp=新位图(2,2))
{
Color col=Color.FromArgb(1,2,3,4);
bmp.SetPixel(0,0,col);
保存(ms,ImageFormat.bmp);
}
使用(位图bmp=新位图(毫秒))
{
Color col=bmp.GetPixel(0,0);
//列A的值=255。为什么?我在这里预期为1。
}
我希望将
位图
保存到内存流
中,并以透明方式将其读回。如何解决此问题?问题是这一行:bmp.Save(ms,ImageFormat.bmp)
。ImageFormat.Bmp不支持alpha值,您可以将其更改为ImageFormat.Png以获得相同的效果。问题在于这行:Bmp.Save(ms,ImageFormat.Bmp)
。ImageFormat.Bmp不支持alpha值,您可以将其更改为ImageFormat.Png以获得相同的效果。AFAIK Bmp格式不支持透明度。检查是否在以下位置将格式更改为PNG:
bmp.Save(ms, ImageFormat.Png);
但是,您可以索引.bmp,它将在第256点添加透明颜色。问题是,bmp的许多图像要求是24位和32位,而透明索引图像只能转换为16位。AFAIK bmp格式不支持透明。检查是否在以下位置将格式更改为PNG:
bmp.Save(ms, ImageFormat.Png);
但是,您可以索引.bmp,它将在第256点添加透明颜色。问题是,bmp的许多图像要求是24位和32位,透明索引图像只能转换为16位。在调用
新位图(ms)
之前,没有ms.position=0
。不确定在这种情况下是否有问题,请进行注释。在调用新位图(ms)之前,没有ms.position=0
。不确定在这种情况下是否有问题,因此请评论.1至.Png
建议。从流中读取位图确实会在流中查找,这有点令人惊讶,但似乎ms.position=0
在new bitmap(ms)
之前,当我期望有一个新位图时。+1到.Png
建议。从流中读取位图确实会在流中查找,这有点令人惊讶,但似乎ms.position=0
在new bitmap(ms)
之前,当我期望一个位图时。