以下是full listing的相关代码:
#include "CImg.h"
using namespace cimg_library;
int main() {
CImg<unsigned char> src("Tulips.jpg");
int width = src.width();
int height = src.height();
int depth = src.depth();
//New grayscale images.
CImg<unsigned char> gray1(width,height,depth,1);
CImg<unsigned char> gray2(width,height,depth,1);
// ...
(src,gray1,gray2).display("RGB to Grayscale");
}
行(src,gray1,gray2).display("RGB to Grayscale");
如何运作?如何将display
成员函数应用于逗号分隔列表中的每个对象?
答案 0 :(得分:2)
CImg
重载operator,
,它返回一个CImgList
对象,该对象是一个包含作为操作数给出的两个CImg
对象的列表。该对象还会重载operator,
以允许CImg
个对象添加到列表中。
表达式(src,gray1,gray2)
相当于((src,gray1),gray2)
。内部括号(src,gray1)
创建CImgList
,然后(...,gray2)
将gray2
附加到该列表,返回对同一列表的引用。 CImgList
具有成员函数display
。
答案 1 :(得分:0)
说重载运算符,()必然意味着丑陋的设计是愚蠢的。 有很多有用且聪明的方法来重载此运算符,CImg完美地完成了它。您是否认为C ++标准会允许它,如果它总是像你说的那样'愚蠢'? 在这个例子中,C ++代码读得很好,它肯定比写作更简单(但相当于) CImgList(SRC,灰色,GRAY2)。显示();
由于CImg是一个加速图像处理算法编写的库(主要用于原型设计),这种结构绝对有用。