在C#中显示非常大的1bpp位图

时间:2016-06-17 05:25:07

标签: c# bitmap

我将二进制文件作为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的文件。显然我不能一次将所有文件加载到内存中,我必须加载需要在imagebox上显示的部分文件。我想知道是否有一种工具/方法来缓解我的问题?

1 个答案:

答案 0 :(得分:0)

您可以考虑使用深度缩放技术。这里有一个描述https://msdn.microsoft.com/en-us/library/cc645077(v=vs.95).aspx

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