2

我一直在使用 Boost.GIL 来执行一些基本的图像处理程序。在 Boost.GIL 中,不同类型像素之间的色彩空间转换是通过一个泛型convert_pixel( )函数的模板特化来实现的。但是,例如,我很想用基于 LCMS 的东西来覆盖这些实现。

有没有办法覆盖模板的专业化,以便任何内部调用都convert_pixel()将使用新的基于 LCMS 的convert_pixel()

最终回答

深入研究 GIL 设计手册(比教程更有趣),我发现 Adob​​e 建议如何解决这个问题。对于我们感兴趣的人,此链接提供了答案: http: //www.boost.org/doc/libs/1_49_0/libs/gil/doc/html/gildesignguide.html#NewColorConversionDG

4

2 回答 2

0

我对 GIL 不熟悉,在文档中只发现了类似的功能。但是,可能不需要回答这个问题。

劫持原始调用,您应该能够覆盖转换。函数优先级应该来挽救这一天:普通函数总是比模板函数更受欢迎。假设原始模板特化是

template<> 
GIL_FORCEINLINE void boost::gil::copy_and_convert_pixels (const V1 &src, const V2 &dst, CC cc) { original_code; }

您可以覆盖这个定义您的自定义非模板函数

GIL_FORCEINLINE void boost::gil::copy_and_convert_pixels (const V1 &src, const V2 &dst, CC cc) { overridden_code; }

您应该特别注意将函数定义到具有相同名称的相同命名空间中,并在第一次调用之前将其包含在内。

于 2012-05-18T09:46:16.127 回答
0

FWIW,请参阅此答案以获取覆盖示例boost::gil::color_convert,以扩展 boost::gil::copy_and_convert_pixelsGIL 尚未提供的转换的行为。

我认为你会在尝试替换GIL 中定义的现有转换时遇到问题color_convert.hpp;可能您想要/需要走的路线是定义一个新的颜色基础 cf rgb_t, cmyk_t (例如 lcms_t ?),然后定义default_color_converter_impl<rgb_t,lcms_t>与它互操作的东西。

于 2012-06-21T22:29:59.213 回答