将bmp或png(或其他格式)中的相同图像加载到位图时有什么区别吗?原始图像格式是否会影响RAM中的Bitmap
对象大小?
有没有办法归档Bitmap
个对象,以减少RAM资源消耗?
答案 0 :(得分:1)
大小只受文件大小的影响,无论格式如何(但很明显,某些格式会导致文件比其他格式更小)。
存档位图的一种方法是,如果你需要将它们保存为位图,只需将它们压缩即可。或者,将它们转换为包含压缩的另一种图像格式(理想情况下,无损压缩,因此不是jpg)。对不起,这解释了归档文件,而不是保存实时内存使用。
要使用内存停止位图对象,您需要释放内存中的项目,并在需要再次使用时重新加载它。或者,虽然我没有这方面的经验,但请查看新的.NET 4内存映射文件。
答案 1 :(得分:0)
有两种方法可以将数据保存在内存中
图像对象大小不受原始图像格式的影响。但保存对象的流的大小确实如此。
以下是如何从对象获取流的方法:
public static Stream GetPNGBitmapStream(Image initial)
{
return GetBitmapStream(initial, "image/PNG");
}
public static Stream GetJPGBitmapStream(Image initial)
{
return GetBitmapStream(initial, "image/jpeg");
}
private static Stream GetBitmapStream(Image initial, string mimeType)
{
MemoryStream ms = new MemoryStream();
var qualityEncoder = Encoder.Quality;
var quality = (long)90;
var ratio = new EncoderParameter(qualityEncoder, quality);
var codecParams = new EncoderParameters(1);
codecParams.Param[0] = ratio;
ImageCodecInfo[] infos = ImageCodecInfo.GetImageEncoders();
ImageCodecInfo jpegCodecInfo = null;
for (int i = 0; i < infos.Length; i++)
{
if (string.Compare(infos[i].MimeType, mimeType,true) == 0)
{
jpegCodecInfo = infos[i];
break;
}
}
if (jpegCodecInfo != null)
{
initial.Save(ms, jpegCodecInfo, codecParams);
MemoryStream ms2 = new MemoryStream(ms.ToArray());
ms.Close();
ms.Dispose();
return ms2;
}
return null;
}