2012-05-07 5 views
2

저는 Boost.GIL을 사용하여 기본 이미지 처리 루틴을 수행했습니다. Boost.GIL에서, 유형이 다른 픽셀 간의 색상 공간 변환은 일반 convert_pixel() 함수의 템플릿 전문화에 의해 실현됩니다. 그러나 이러한 구현을 LCMS 기반의 무언가로 대체하는 것이 좋습니다.특수 템플릿 덮어 쓰기

convert_pixel()에 대한 내부 호출이 새로 LCMS 기반 convert_pixel()을 사용하도록 템플릿의 특수화를 무시할 수있는 방법이 있습니까? GIL로 설계 설명서 (훨씬 더 흥미로운 튜토리얼 이상)을 파고

최종 aswer

는, 나는 어도비는이 문제를 해결하기 위해 제안하는 방법을 발견했습니다. 우리가 관심이있는 분들을 위해이 링크는 답변을 제공합니다 : http://www.boost.org/doc/libs/1_49_0/libs/gil/doc/html/gildesignguide.html#NewColorConversionDG

답변

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; } 

이 정의하는 사용자 정의 nontemplate 기능을 대체 할 수 있습니다, 또한 포함 첫 번째 전화가 걸리기 전에.

+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