我有四个已知大小相同的 .j2k 文件(无损),我想将它们组合成一个更大的 .j2k 文件。当然,现在简单而有效的方法是将它们解压缩为位图并将较大的位图压缩为 .j2k 文件 - 但这是性能开销。有没有更简单的方法?如果是这样,您可以用伪代码突出显示它吗?
更新
根据@malat 的建议,我尝试了以下操作(请参阅我的 github 存储库以获取完整的源代码和图像示例):
// for the simplicity I'm using same image to make 4 tiles 2x2
jpeg.header.Xsiz *= 2;
jpeg.header.Ysiz *= 2;
vector<j2k_tile_part> tiles = jpeg.tiles;
BOOST_FOREACH(j2k_tile_part& part, jpeg.tiles)
{
part.Isot = 2;
}
for (int i = 0; i < 3; i++)
{
BOOST_FOREACH(const j2k_tile_part& part, tiles)
{
j2k_tile_part clone(part);
switch(i)
{
case 0:
clone.Isot = 3;
break;
case 1:
clone.Isot = 0;
break;
case 2:
clone.Isot = 1;
break;
}
jpeg.tiles.push_back(clone);
}
}
jpeg.save_file(output_file);
哪个有效(就具有正确尺寸和填充图像数据的图像而言)。只有第一块瓷砖看起来还可以,但其他瓷砖就搞砸了。我虽然瓷砖是单独编码的 - 我错了吗?我还尝试将 COD 和 QCC 标记从主标题复制到平铺标题 - 但这也没有帮助。