【问题标题】:System.Drawing.Graphics very large imagesSystem.Drawing.Graphics 非常大的图像
【发布时间】:2011-07-17 06:46:18
【问题描述】:

我正在创建一个基本的 AutoCAD 查看器,它必须处理非常大的图像。

我正在使用 System.Drawing.Graphics 通过以下方式渲染图像:

Bitmap imageData;

public void Init(string filepath)
{
    imageData = new Bitmap(filepath);
}

public void Render(System.Drawing.Graphics ctx)
{
    ctx.DrawImage(imageData, x, y, w, h);
}

我正在处理的一个特定文件有大约十个 8000x8000 像素的 .tif 文件。毋庸置疑,上面的内容非常适合 OutOfMemory 异常。

每个文件被压缩到几兆字节。谁能提出更好的渲染策略?

【问题讨论】:

  • 我估计十个 8000x8000 像素的 .tif 文件约为2.56GB 你有多少内存?
  • @Mitch:如果我没记错的话,我在某处读到 .NET 进程的最大工作大小是 2GB,所以这个应用程序失败是很合乎逻辑的。
  • 它必须在典型的客户端机器上工作,所以我不能强迫 .net 以其他方式表现不同。我正在寻找一种内存密集度较低的策略来渲染这些图像。顺便说一句,AutoCAD 查看器没有任何问题(它的渲染通常要慢很多,尽管对于其他所有内容)。

标签: c# image graphics bitmap drawing


【解决方案1】:

您使用的是 .NET 4 吗?如果是这样,您可以使用内存映射文件将数据“加载”到内存中,并且只读取您需要在屏幕上呈现的位。

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多