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