我正在尝试实现用户可以缩放和平移的世界地图。我遇到了程序内存不足的问题。
这是我的情况:
0) 我正在用 C# 和 OpenGL 编写程序
1) 我从网上下载了一张 JPG 图片,它是世界的详细图片,大小为 19 兆。每个像素长 24 位。
2)当我的程序初始化时,我在运行时将此图像切成小块。我使用 glGenTexture、glBindTexture 和 glTexImage2d 将每个图块输入 OpenGL。
3)在我的绘图程序中,我一个一个地绘制瓷砖并尝试绘制所有瓷砖,无论它们是否在屏幕上(这是另一个问题,我知道)。
对于小图像,一切正常。但是,对于大图像,当我将 JPG 解码为位图以便将其切碎时,我的程序的内存占用量会激增至超过 1 GB。我知道 JPG 是压缩的,而 .NET JpegBitmapDecoder 对象正在解压缩一个巨大的图像,这可能是让我遇到麻烦的原因。
我的问题是,在这种情况下究竟能做什么?由于 C# 解码代码是炸毁内存的第一责任方,是否有另一种创建图块并将它们提供给 OpenGL 的替代方法,而我应该采用这种方法(减去位图)?