From a4b191a7e044de508603986e9a303bddbcb4783c Mon Sep 17 00:00:00 2001 From: Harvey Date: Mon, 29 Aug 2022 10:21:17 +0800 Subject: [PATCH] 4-bit_palette_color --- modules/imgcodecs/src/grfmt_tiff.cpp | 12 ++++++++++++ modules/imgcodecs/test/test_tiff.cpp | 10 ++++++++++ 2 files changed, 22 insertions(+) diff --git a/modules/imgcodecs/src/grfmt_tiff.cpp b/modules/imgcodecs/src/grfmt_tiff.cpp index a2b55ea2ff..0ae60e6947 100644 --- a/modules/imgcodecs/src/grfmt_tiff.cpp +++ b/modules/imgcodecs/src/grfmt_tiff.cpp @@ -312,6 +312,18 @@ bool TiffDecoder::readHeader() result = true; break; } + case 4: + //support 4-bit palette. + if (photometric == PHOTOMETRIC_PALETTE) + { + CV_Check((int)sample_format, sample_format == SAMPLEFORMAT_UINT || sample_format == SAMPLEFORMAT_INT, ""); + int depth = sample_format == SAMPLEFORMAT_INT ? CV_8S : CV_8U; + m_type = CV_MAKETYPE(depth, 3); + result = true; + } + else + CV_Error(cv::Error::StsError, "bitsperpixel value is 4 should be palette."); + break; case 8: { //Palette color, the value of the component is used as an index into the red, diff --git a/modules/imgcodecs/test/test_tiff.cpp b/modules/imgcodecs/test/test_tiff.cpp index b7b6b95d83..76a39c0fae 100644 --- a/modules/imgcodecs/test/test_tiff.cpp +++ b/modules/imgcodecs/test/test_tiff.cpp @@ -359,6 +359,16 @@ TEST(Imgcodecs_Tiff, read_palette_color_image) ASSERT_EQ(CV_8UC3, img.type()); } +TEST(Imgcodecs_Tiff, read_4_bit_palette_color_image) +{ + const string root = cvtest::TS::ptr()->get_data_path(); + const string filenameInput = root + "readwrite/4-bit_palette_color.tif"; + + const Mat img = cv::imread(filenameInput, IMREAD_UNCHANGED); + ASSERT_FALSE(img.empty()); + ASSERT_EQ(CV_8UC3, img.type()); +} + TEST(Imgcodecs_Tiff, readWrite_predictor) { /* see issue #21871