2012-05-07 15 views
2

私はBoost.GILを使っていくつかの基本的な画像処理ルーチンを実行してきました。 Boost.GILでは、汎用タイプconvert_pixel()のテンプレート特化によって異なるタイプのピクセル間の色空間変換が実現されています。 しかし、私はこれらの実装をLCMSに基づいたものでオーバーライドしたいと思います。特殊なテンプレートを上書きする

convert_pixel()への内部呼び出しが新しくLCMSベースのconvert_pixel()を使用するように、テンプレートの特殊化を無効にする方法はありますか? GIL設計マニュアルを掘り下げる

決勝aswer

は(はるかに興味深いチュートリアルより)、私はAdobeがこの問題を解決するために提案する方法を発見しました。私たちが興味を持っている人のために、このリンクは答えを提供します:http://www.boost.org/doc/libs/1_49_0/libs/gil/doc/html/gildesignguide.html#NewColorConversionDG

答えて

0

私はGILに慣れていません。しかし、質問に答える必要はないかもしれません。

元の通話をハイジャックすると、変換を上書きできるはずです。関数の優先順位は、その日を節約するために来なければなりません:通常の関数は常にテンプレート関数より優先されます。オリジナルのテンプレートの特殊化を仮定すると、あなたは、このカスタム非テンプレート関数を定義

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

を上書きすることができます

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

あなたは同じ名前で同じ名前空間に関数を定義するために特別な注意を払う、とも含むべきですそれは最初の呼び出しが行われる前です。

+0

残念ながら、一般的にあなたのアイデアはうまくいきますが、この特定のケースではうまくいきません。実際、色の変換はboost/gil/color_convert.hppで定義されたclass default_color_converterに依存しています。 "トリック"はそこにありますが、私はそれをどのように置き換えるかを理解しなければなりません。しかし、新しい課題があるのは良いことです。 – davideanastasia

0

FWIW、既にGILによって提供されていない変換でboost::gil::copy_and_convert_pixels挙動を拡張の目的のためにオーバーライドboost::gil::color_convertthis answer for an exampleを参照。

には、のGILのcolor_convert.hppで定義されている既存のコンバージョンを置き換えても問題はないと思います。おそらくあなたが望む/下りたいルートは、新しい色のベースc.f rgb_t、cmyk_t(例えばlcms_t?)を定義してから、default_color_converter_impl<rgb_t,lcms_t>のようなものを定義して相互運用することです。

+0

lcmsは色空間ではありませんが、色空間変換の管理のためのライブラリです:http://www.littlecms.com/ – davideanastasia

関連する問題