| 235 | } |
| 236 | |
| 237 | Expected<MR::DistanceMap> convertImageToDistanceMap( const Image& image, float threshold, bool invert ) |
| 238 | { |
| 239 | threshold = std::clamp( threshold * 255, 0.f, 255.f ); |
| 240 | DistanceMap dm( image.resolution.x, image.resolution.y ); |
| 241 | const auto& pixels = image.pixels; |
| 242 | for ( int i = 0; i < image.pixels.size(); ++i ) |
| 243 | { |
| 244 | const bool monochrome = pixels[i].r == pixels[i].g && pixels[i].g == pixels[i].b; |
| 245 | float value = float(pixels[i].r); |
| 246 | if ( !monochrome ) |
| 247 | { |
| 248 | value = 0.299f * float( pixels[i].r ) + |
| 249 | 0.587f * float( pixels[i].g ) + |
| 250 | 0.114f * float( pixels[i].b ); |
| 251 | } |
| 252 | if ( value < threshold ) |
| 253 | continue; |
| 254 | dm.set( i, invert ? 255.0f - value : value ); |
| 255 | } |
| 256 | return dm; |
| 257 | } |
| 258 | |
| 259 | template <typename T = float> |
| 260 | DistanceMap computeDistanceMap_( const MeshPart& mp, const MeshToDistanceMapParams& params, ProgressCallback cb, |
no test coverage detected