打包位图

时间:2011-07-13 05:41:19

标签: c++ bitmap textures packing bin-packing

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

我目前将位图存储为char指针,我可以获得每个位图的尺寸。

2 个答案:

答案 0 :(得分:2)

我不是垃圾箱包装的专家,但这是一个你可以尝试的简单算法。

  1. 将字形从最高到最短。最高的字形将首先放置。
  2. 设H为下一个最高的未放置字形的高度。
  3. 通过添加高度H来垂直扩展纹理。
  4. 使用剩余的字形(最高到最短)填充关卡,直到下一个字形没有剩余空间。
  5. 转到#2
  6. 这称为Next-Fit Decreasing Height (NFDH)算法。可以看到一个交互式演示here

    由于你的字形或多或少都是相同的高度,我认为这个简单的算法可以给你很好的结果。

    查看此survey了解更多算法。

答案 1 :(得分:1)

简单打包算法可在此处找到:http://www.blackpawn.com/texts/lightmaps/

在JukkaJylänki的论文“千种方式打包”中,它被称为“断头台包装”。

blackpawn.com上的伪代码非常简单。

类似问题也有相关答案: Piece together several images into one big image