在 C++ 上使用 CImg 类显示多个图像

Posted

技术标签:

【中文标题】在 C++ 上使用 CImg 类显示多个图像【英文标题】:Display several images using CImg class on C++ 【发布时间】:2017-05-18 13:26:42 【问题描述】:

如何将多张卡片(52 张卡片)的图像显示到“网格”中? 我正在尝试在左上角创建四个桩,在右上角创建四个桩,使用 CImg 类构成我游戏的主表的八个桩。

【问题讨论】:

模板图像处理工具包的CImg? Visual C++ 已经内置了用于图像显示的函数,例如 CBitmapCImage。如果这些还不够,您可以集成第三方图像库 CxImage。这是我第一次听说 CImg。 【参考方案1】:

更新答案

你可以像这样使用append()

#include "CImg.h"
using namespace cimg_library;
int main() 
   // Load up all images into CImg structures
   CImg<unsigned char> c7("7.png");
   CImg<unsigned char> c9("9.png");
   CImg<unsigned char> c4("4.png");
   CImg<unsigned char> cjack("jack.png");

   // Declare output and intermediate variables
   CImg<unsigned char> row0,row1,grid;

   // Append horizontally into a row, you could append many - you are not restricted to 2
   row0 = c7.append(cjack,'x');

   // Append horizontally into a row
   row1 = c4.append(c9,'x');

   // Append vertically into a column
   grid = row0.append(row1,'y');

   grid.display();


原答案

最简单的方法可能是像这样附加图像:

#include "CImg.h"
using namespace cimg_library;
int main() 
   CImg<unsigned char> c7("7.png");
   CImg<unsigned char> c9("9.png");
   CImg<unsigned char> cjack("jack.png");
   CImg<unsigned char> row;
   row = c7.append(cjack,'y').append(c9,'y');
   row.display();

这给出了这个:

如果您将append()'y' 轴参数更改为'x',它们将并排附加:

   CImg<unsigned char> col;
   col = c7.append(cjack,'x').append(c9,'x');
   col.display();

所以,你现在应该可以看到如何制作网格了。

【讨论】:

【参考方案2】:

CImg 本身具有在窗口中显示图像的非常基本的能力。您所能做的就是显示多个图像,使用 CImgDisplay 结构将它们沿其中一个轴对齐。请参阅CImgDisplay::display() method 的文档。您可以使用 4 个可用的轴,看看是否符合您的需要。

如果这对你来说还不够,你必须使用一些外部库来显示。

【讨论】:

以上是关于在 C++ 上使用 CImg 类显示多个图像的主要内容,如果未能解决你的问题,请参考以下文章

调用CImg库显示WAV格式音频波形

无法使用cimg访问图像中的像素强度(返回0)

如何在 C++ 中使用 ZeroMQ 通信多个图像?

使用 CImg 编辑 RGB 像素数据 - Visual C++ 2008

使用CImg将图像文件转换为像素矢量?

为keras输入R转换图像/数组列表