2

Boost.GIL を使用して、基本的な画像処理ルーチンを実行しています。Boost.GIL では、異なる種類のピクセル間の色空間変換は、ジェネリックconvert_pixel( )関数のテンプレート特化によって実現されています。ただし、これらの実装を、たとえば LCMS に基づくものでオーバーライドしたいと考えています。

convert_pixel()への内部呼び出しが新しく LCMS ベースの を使用するように、テンプレートの特殊化をオーバーライドする方法はありますconvert_pixel()か?

最終回答

GIL 設計マニュアル (チュートリアルよりもはるかに興味深い) を掘り下げると、Adobe がこの問題を解決する方法を提案していることがわかりました。私たちが興味を持っている人のために、このリンクは答えを提供します: 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、GILによってまだ提供されていない変換で動作を拡張する目的でオーバーライドする例については、この回答を参照してください。boost::gil::color_convert boost::gil::copy_and_convert_pixels

ただし、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 に答える