【问题标题】:display very large 1bpp bitmap in C#在 C# 中显示非常大的 1bpp 位图
【发布时间】:2021-06-15 11:39:55
【问题描述】:

我将二进制文件作为 1bpp 位图加载到 imagebox 中(我的图片框能够缩放和平移图像,继承了 ScrollableControl)。我对小孩子没有问题。我从文件中读取一个字节数组并将其转换为位图,如下所示:

Bitmap bmp = new Bitmap(width, height, PixelFormat.Format1bppIndexed);
BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.WriteOnly, bmp.PixelFormat);
Marshal.Copy(data, 0, bmpData.Scan0, data.Length);
bmp.UnlockBits(bmpData);
this.Image = bmp;

但是当涉及到大文件时,我的问题就开始了。我想处理大小超过 20gb 的文件。显然我不能一次将所有文件加载到内存中,我必须加载需要在图像框上显示的部分文件。我想知道有什么工具/方法可以缓解我的问题吗?

【问题讨论】:

  • this 这样的问题?
  • 即使在 4K 屏幕上显示每个像素,也只有不到 100MB。从 20GB 文件中选择要显示的像素。
  • @Tommy 这正是我希望你帮助我的。当滚动事件发生时,我需要加载部分文件并将其显示在 Imagebox 中。
  • @JeroenHeier 该问题中的问题是裁剪加载到内存中的图像。但我的问题是需要将文件的一部分加载到内存中以及何时应该发生

标签: c# bitmap


【解决方案1】:

您可以考虑使用 Deep Zoom 技术。这里有说明https://msdn.microsoft.com/en-us/library/cc645077(v=vs.95).aspx

Deep Zoom 的要点在于,可以将非常大的图像文件分解成许多比原始图像小得多的“图块”。使用 Deep Zoom 的客户端将只加载显示原始图像的任何部分所需的图块,类似于 Google 地图的工作方式。

【讨论】:

    猜你喜欢
    • 2013-05-05
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 2020-01-03
    • 1970-01-01
    • 2010-09-13
    相关资源
    最近更新 更多