gpt4 book ai didi

c# - 有没有比将图像保存到流来计算它在磁盘上有多大的不同方法?

转载 作者:行者123 更新时间:2023-11-30 16:57:00 25 4
gpt4 key购买 nike

我有一个包含 .png 图片的图像变量。

为了计算它在磁盘上的大小,我目前将它分配到内存缓存中,然后使用该“内存文件”的长度来计算它是否在我想要的文件大小范围内。

因为这对我来说似乎效率很低(“真正的”计算可能更快并且内存占用更少)我想知道是否有其他方法可以做到这一点。

示例:

private bool IsImageTooLarge(Image img, long maxSize)
{
using (MemoryStream ms = new MemoryStream())
{
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
if (ms.ToArray().Length > maxSize)
{
return true;
}
}
return false;
}

附加信息:源代码是 .dll 的一部分,因此 Web 特定的东西在那里不起作用,因为我需要用 C# 本身做一些事情。

最佳答案

您可以通过实现自己的 Stream 来节省内存,例如 PositionNullStream,这类似于 Stream.Null 对象后面的 NullStream 类,但带有位置计数器。您的实现将为图像的 Save 方法提供一个只写流,并在 Save 完成时从中收集当前位置。

private bool IsImageTooLarge(Image img, long maxSize)
{
using (var ps = new PositionNullStream()) {
img.Save(ps, System.Drawing.Imaging.ImageFormat.Png);
return ps.Position > maxSize;
}
}

您可以在第 1445..1454 here 行找到 NullStream 的示例实现。更改实现以在调用写入和重新定位方法时存储当前位置(NullStream 被硬编码为返回零)。

关于c# - 有没有比将图像保存到流来计算它在磁盘上有多大的不同方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27226336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com