【发布时间】:2013-04-10 19:43:13
【问题描述】:
可能是菜鸟问题。我希望使用 CImg 库对图像进行一些处理。它们中的一些可能是(8 位)和其中一些(16 位)的类型。不幸的是,在用户不选择要处理的文件之前,我不知道数据的类型。我当然可以这样做:
...
CImg <unsigned char> img_unisgned_char;
CImg <unsigned short> img_unisgned_short;
...
if (user_pick_8bit) img_unisgned_char.load_raw(fname,img_size_x,img_size_y);
if (user_pick_16bit) img_unisgned_short.load_raw(fname,img_size_x,img_size_y);
...
但是对于“unsigned char”、“int”或“float”类型(例如“load_raw”或“blur”),99% 的 CImg 方法看起来完全相同。有什么方法可以制作 - 我不知道 - 指针? - 所以当用户选择文件时,我可以制作魔法:
if (user_pick_8_bit) img = img_unisgned_char;
if (user_pick_16bit) img = img_unisgned_short;
...
//now no mother of what type is picked up by user I simply make:
img.load_raw(...);
【问题讨论】:
-
相关问题:http://stackoverflow.com/q/608409/501250。如果您无法使用虚拟基类改造
CImg<>,则答案可能不适用于您的情况。 -
在我的网络搜索中,我找到了这个解决方案。但是我不明白如何在我的情况下使用它。 (我对 C++ 的了解甚至无法改变 CIMg 库中的任何内容......)。所以我唯一的选择是为每种类型创建单独的代码???
-
不一定。您可以定义自己的模板函数:
template <typename T> void do_image_processing(/* ... */) { CImg<T> img; img.load_raw(/* ... */); }
标签: c++