41 #ifndef _ncv_color_conversion_hpp_
42 #define _ncv_color_conversion_hpp_
44 #include "NCVPixelOperations.hpp"
52 template<NCVColorSpace CSin, NCVColorSpace CSout,
typename Tin,
typename Tout>
struct __pixColorConv {
56 template<
typename Tin,
typename Tout>
struct __pixColorConv<NCVColorSpaceRGBA, NCVColorSpaceGray, Tin, Tout> {
59 Ncv32f luma = 0.299f * pixIn.x + 0.587f * pixIn.y + 0.114f * pixIn.z;
60 _TDemoteClampNN(luma, pixOut.x);
63 template<
typename Tin,
typename Tout>
struct __pixColorConv<NCVColorSpaceGray, NCVColorSpaceRGBA, Tin, Tout> {
66 _TDemoteClampNN(pixIn.x, pixOut.x);
67 _TDemoteClampNN(pixIn.x, pixOut.y);
68 _TDemoteClampNN(pixIn.x, pixOut.z);
72 template<NCVColorSpace CSin, NCVColorSpace CSout,
typename Tin,
typename Tout>
77 ncvAssertReturn(h_imgIn.
size() == h_imgOut.
size(), NCV_DIMENSIONS_INVALID);
79 (h_imgIn.
memType() == NCVMemoryTypeHostPinned || h_imgIn.
memType() == NCVMemoryTypeNone), NCV_MEM_RESIDENCE_ERROR);
80 NCV_SET_SKIP_COND(h_imgIn.
memType() == NCVMemoryTypeNone);
83 for (Ncv32u i=0; i<h_imgIn.
height(); i++)
85 for (Ncv32u j=0; j<h_imgIn.
width(); j++)
NCVMemoryType memType() const
T & at(Ncv32u x, Ncv32u y) const
static void _pixColorConv(const Tin &pixIn, Tout &pixOut)
static void _pixColorConv(const Tin &pixIn, Tout &pixOut)
static void _pixColorConv(const Tin &pixIn, Tout &pixOut)