c++ - 打包位图

标签 c++ bitmap textures packing bin-packing

我正在尝试将字体字形图像打包到单个纹理中。位图是每像素 1 字节的单色位图,我希望将它们全部打包到 1 个纹理上。我能够计算所需的最小纹理大小,但无法管理将它们全部打包在一起的算法。

我目前将位图存储为字符指针,并且我能够获取每个位图的尺寸。

最佳答案

我不是装箱方面的专家,但这里有一个您可以尝试的简单算法。

  1. 按从最高到最短的顺序排列字形。最高的字形将被放置在最前面。
  2. 令 H 为下一个最高的未放置字形的高度。
  3. 通过添加高度 H 来垂直扩展纹理。
  4. 用剩余的字形填充关卡(从最高到最短),直到没有空间容纳下一个字形。
  5. 转到#2

这被称为 Next-Fit Decreasing Height (NFDH)算法。互动演示可见here .

由于您的字形或多或少具有相同的高度,我认为这个简单的算法应该会给您带来良好的结果。

看看这个 survey了解更多算法。

关于c++ - 打包位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6674521/

相关文章:

iphone - 在 WhirlyGlobe 中使用纹理作为标签

opengl - 在 OpenGL 中渲染到纹理数组的一层

c++ - alloca () 可以替代 C++ 中的自动指针吗?

c++ - 使用 C++ 样式转换将 int 转换为 char

c++ - 使用 visual studio 测量 RTT

android - 将位图保存到文件

Android,沿路径移动位图?

c++ - 是否可以仅在片段着色器中创建纹理?

c++ - 我正在尝试运行 CUDA 示例,但我在 Ubuntu 16.04 LTS 上遇到 openGL (libGLEW.a) 问题

iphone - iOS位图图片制作——简单示例