| 123 | |
| 124 | template <typename U> |
| 125 | void copyFromTiffImpl( Color* dst, const U* src, size_t size, const TiffParameters& tp ) |
| 126 | { |
| 127 | switch ( tp.valueType ) |
| 128 | { |
| 129 | case TiffParameters::ValueType::RGBA: |
| 130 | if constexpr ( std::is_same_v<uint8_t, U> ) |
| 131 | { |
| 132 | std::copy( (Color*)src, (Color*)src + size, dst ); |
| 133 | } |
| 134 | else |
| 135 | { |
| 136 | for ( auto i = 0u; i < size; ++i ) |
| 137 | for ( auto j = 0; j < 4; ++j ) |
| 138 | dst[i][j] = Color::valToUint8( src[i * 4 + j] ); |
| 139 | } |
| 140 | break; |
| 141 | case TiffParameters::ValueType::RGB: |
| 142 | for ( auto i = 0u; i < size; ++i ) |
| 143 | for ( auto j = 0; j < 3; ++j ) |
| 144 | dst[i][j] = Color::valToUint8( src[i * 3 + j] ); |
| 145 | break; |
| 146 | case TiffParameters::ValueType::Scalar: |
| 147 | for ( auto i = 0u; i < size; ++i ) |
| 148 | for ( auto j = 0; j < 3; ++j ) |
| 149 | dst[i][j] = Color::valToUint8( src[i] ); |
| 150 | break; |
| 151 | case TiffParameters::ValueType::Unknown: |
| 152 | MR_UNREACHABLE_NO_RETURN; |
| 153 | break; |
| 154 | } |
| 155 | } |
| 156 | |
| 157 | template <typename T, typename U, typename = std::enable_if_t<std::is_arithmetic_v<T>>> |
| 158 | void copyFromTiffImpl( T* dst, const U* src, size_t size, const TiffParameters& tp ) |