【问题标题】:Can I save memory by preloading a bunch of jpeg images instead of bmp? [duplicate]我可以通过预加载一堆 jpeg 图像而不是 bmp 来节省内存吗? [复制]
【发布时间】:2012-08-16 03:31:32
【问题描述】:

可能重复:
How can I load 8 bit bmp with OpenGL?

我需要加载尽可能多的图像,然后将它们作为动画播放。因此,我想最小化每个图像的大小。

我的问题是,如果我加载一个 jpeg 图像文件,我的机器会将其存储为 bmp 格式吗?目前,我正在使用 OpenGL 加载 bmp 图像(每个大约 3.5 MB)。 600 个 bmp 文件已经超出了我的记忆。我怎样才能加载更多,比如 2000。

【问题讨论】:

    标签: opengl animation jpeg preload bmp


    【解决方案1】:

    我的问题是,如果我加载一个 jpeg 图像文件,我的机器会将其存储为 bmp 格式吗?

    您的机器会将其作为原始像素保存在内存中,除非您使用的是压缩纹理格式,但它与 JPEG 非常不同。

    文件格式对硬件和 OpenGL 没有意义。

    我怎样才能加载更多,比如 2000。

    你不应该。如果您正在播放动画,请在该图像显示时加载图像,然后将其删除。对于 OpenGL,您应该使用 glTexSubImage2D 替换纹理对象的内容。

    【讨论】:

    • 谢谢你,datenwolf。实际上,我有一个类似幻灯片的程序来播放动画,就像你说的“当它应该显示时加载图像,然后删除它”,但是帧率很低。我想要 60 帧/秒。有什么想法吗?
    • @ChenDanielJinzhao:在现代硬件上应该很容易实现 60fps。首先,您应该使用像素缓冲区对象,以便您可以异步地将图像数据加载到 OpenGL 内存。如果您有可用的 OpenGL-4,请结合使用 glTexStorage 和 glTexSubImage2D 来减少创建实际纹理对象的开销。
    【解决方案2】:

    您可以考虑以更适合动画的格式存储图像。 视频浮现在脑海中。

    如果您只需要一次图像 - 在显示后立即从内存中丢弃它们。

    使用 DXT 打包图像。质量略有下降,您将获得 x4/x8 压缩比。

    检查你的 OpenGL 设置,你是否使用自动生成的 mipmap,你需要它们吗?

    【讨论】:

    • 感谢 Krom,我使用 3D_Max 来预生成位图,然后尝试使用 OpenGL 以 60 fps 的帧速率循环播放这些图像作为动画。所以我不能丢弃它们。在播放过程中,我需要通过在每一步中跳过一个或多个图像来改变动画的速度。如果我清楚,我不会。但我确实希望你能帮助我解决这个问题。非常感谢。
    猜你喜欢
    • 2017-02-14
    • 2014-03-19
    • 2011-12-09
    • 2023-03-23
    • 2012-01-18
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多