Range cast

group NVCV_CPP_CUDATOOLS_RANGECAST

Metafunction to range cast (scale) all elements to a target range.

This function range casts (that is scales) all elements to the range defined by the template argument type T. For instance, a float4 with all elements between 0 and 1 can be casted to an uchar4 with scaling of each element to be in between 0 and 255 (see example below). It is a requirement of RangeCast that both types have type traits and type T must be a regular C type. Several examples of possible target range giving a source range, depending on the limits of regular C types, for the RangeCast function are as follows:

Source type U

Target type T

Source range

Target range

signed char

float

[-128, 127]

[-1, 1]

float

unsigned char

[0, 1]

[0, 255]

short

unsigned int

[-32768, 32767]

[0, 4294967295]

double

int

[-1, 1]

[-2147483648, 2147483647]

unsigned short

double

[0, 65535]

[0, 1]

using DataType = MakeType<uchar, 4>;
using FloatDataType = ConvertBaseTypeTo<float, DataType>;
FloatDataType res = ...; // res component values are in [0, 1]
DataType pix = RangeCast<BaseType<DataType>>(res); // pix are in [0, 255]
tparam T:

Type that defines the target range to cast.

tparam U:

Type of the source value (with 1 to 4 elements) passed as argument.

param u:

[in] Source value to cast all elements to range of type T.

return:

The value with all elements scaled.

Functions

template<typename T, typename U, class = Require<HasTypeTraits<T, U> && !IsCompound<T>>> __host__ __device__ auto RangeCast (U u)