Mercurial > hg > orthanc
diff UnitTestsSources/ImageProcessingTests.cpp @ 3365:9345710bbf12
check limits in fillpolygon
author | Alain Mazy <alain@mazy.be> |
---|---|
date | Mon, 13 May 2019 14:50:24 +0200 |
parents | 345f86fd1ac3 |
children | 7a4d586caf2d |
line wrap: on
line diff
--- a/UnitTestsSources/ImageProcessingTests.cpp Tue May 07 13:21:41 2019 +0200 +++ b/UnitTestsSources/ImageProcessingTests.cpp Mon May 13 14:50:24 2019 +0200 @@ -223,3 +223,41 @@ ASSERT_FLOAT_EQ(255, TestFixture::ImageTraits::GetFloatPixel(image, 1, 2)); ASSERT_FLOAT_EQ(255, TestFixture::ImageTraits::GetFloatPixel(image, 2, 4)); } + +TYPED_TEST(TestIntegerImageTraits, FillPolygonLargerThandImage) +{ + ImageAccessor& image = this->GetImage(); + + ImageProcessing::Set(image, 0); + + std::vector<ImageProcessing::ImagePoint> points; + points.push_back(ImageProcessing::ImagePoint(0, 0)); + points.push_back(ImageProcessing::ImagePoint(image.GetWidth(),0)); + points.push_back(ImageProcessing::ImagePoint(image.GetWidth(),image.GetHeight())); + points.push_back(ImageProcessing::ImagePoint(0,image.GetHeight())); + + ASSERT_THROW(Orthanc::ImageProcessing::FillPolygon(image, points, 255), Orthanc::OrthancException); + + // inside polygon (note: we don't test too close from the edges since the current algo is taking some margin from the edges and might be improved in that sense) + ASSERT_FLOAT_EQ(255, TestFixture::ImageTraits::GetFloatPixel(image, 0, 0)); + ASSERT_FLOAT_EQ(255, TestFixture::ImageTraits::GetFloatPixel(image, image.GetWidth()-1, 0)); +} + +TYPED_TEST(TestIntegerImageTraits, FillPolygonFullImage) +{ + ImageAccessor& image = this->GetImage(); + + ImageProcessing::Set(image, 0); + + std::vector<ImageProcessing::ImagePoint> points; + points.push_back(ImageProcessing::ImagePoint(0, 0)); + points.push_back(ImageProcessing::ImagePoint(image.GetWidth() - 1,0)); + points.push_back(ImageProcessing::ImagePoint(image.GetWidth() - 1,image.GetHeight() - 1)); + points.push_back(ImageProcessing::ImagePoint(0,image.GetHeight() - 1)); + + Orthanc::ImageProcessing::FillPolygon(image, points, 255); + + // inside polygon (note: we don't test too close from the edges since the current algo is taking some margin from the edges and might be improved in that sense) + ASSERT_FLOAT_EQ(255, TestFixture::ImageTraits::GetFloatPixel(image, 1, 1)); + ASSERT_FLOAT_EQ(255, TestFixture::ImageTraits::GetFloatPixel(image, image.GetWidth() - 2, image.GetHeight() - 2)); +}