|
| using | TIFFPtr = boost::shared_ptr< TIFF > |
| |
◆ TIFFPtr
◆ getAspectRatio()
95 uint16_t resolutionUnit{};
97 if(TIFFGetField(tif.get(), TIFFTAG_XRESOLUTION, &resolutionX) && TIFFGetField(tif.get(), TIFFTAG_YRESOLUTION, &resolutionY)
98 && TIFFGetField(tif.get(), TIFFTAG_RESOLUTIONUNIT, &resolutionUnit))
100 if(resolutionUnit != RESUNIT_NONE)
103 float const base = std::max(resolutionX, resolutionY);
104 resolutionX = base / resolutionX;
105 resolutionY = base / resolutionY;
107 return Scroom::Utils::make_point<double>(resolutionX, resolutionY);
Referenced by open().
◆ getColorMap()
74 const int result = TIFFGetField(tif.get(), TIFFTAG_COLORMAP, &r, &g, &
b);
79 const size_t count = 1UL << bps;
82 for(
size_t i = 0; i < count; i++)
84 colormap->colors[i] =
Color(1.0 * r[i] / 0xFFFF, 1.0 * g[i] / 0xFFFF, 1.0 *
b[i] / 0xFFFF);
Referenced by getColormapHelper().
◆ getColormapHelper()
◆ open()
127 spdlog::error(
"Failed to open file {}", fileName);
131 auto spp = TIFFGetFieldCheckedOr<uint16_t>(tif,
TT(TIFFTAG_SAMPLESPERPIXEL), 1);
132 auto bps = TIFFGetFieldCheckedOr<uint16_t>(tif,
TT(TIFFTAG_BITSPERSAMPLE), (spp == 1) ? 1 : 8);
133 auto width = TIFFGetFieldChecked<uint32_t>(tif,
TT(TIFFTAG_IMAGEWIDTH));
134 auto height = TIFFGetFieldChecked<uint32_t>(tif,
TT(TIFFTAG_IMAGELENGTH));
135 auto photometric = TIFFGetFieldChecked<uint16_t>(tif,
TT(TIFFTAG_PHOTOMETRIC));
139 if(photometric != PHOTOMETRIC_PALETTE && colormapHelper)
141 spdlog::warn(
"Tiff contains a colormap, but photometric isn't palette");
142 colormapHelper.reset();
145 auto numberOfGreyscaleColors = (bps == 2 || bps == 4) ? (1 << bps) : 2;
148 case PHOTOMETRIC_MINISBLACK:
152 case PHOTOMETRIC_MINISWHITE:
156 case PHOTOMETRIC_PALETTE:
159 spdlog::warn(
"Photometric is palette, but tiff doesn't contain a colormap");
164 case PHOTOMETRIC_RGB:
165 case PHOTOMETRIC_SEPARATED:
169 spdlog::error(
"Unrecognized value {} for photometric", photometric);
176 spdlog::debug(
"This bitmap has size {}*{}, aspect ratio {:.2}*{:.2}", width, height, aspectRatio->x, aspectRatio->y);
180 spdlog::debug(
"This bitmap has size {}*{}", width, height);
183 BitmapMetaData bmd{{}, bps, spp, Scroom::Utils::make_rect<int>(0, 0, width, height), aspectRatio, colormapHelper};
185 if(bps != 1 && bps != 2 && bps != 4 && bps != 8)
187 spdlog::error(
"{} bits per sample not supported (yet)", bps);
201 spdlog::error(
"A RGB bitmap with {} samples per pixel isn't supported (yet)", bps);
211 spdlog::error(
"{} samples per pixel not supported (yet)", spp);
215 return std::make_tuple(bmd, tif);
217 catch(
const std::exception& ex)
219 spdlog::error(
"{}", ex.what());
Referenced by Tiff::open(), Scroom::Tiff::Source::reset(), and TEST().
Colormap::Ptr getColorMap(const TIFFPtr &tif, uint16_t bps)
Definition: tiffsource.cc:67
#define TT(x)
Definition: tiffsource.cc:61
boost::optional< Scroom::Utils::Point< double > > getAspectRatio(const TIFFPtr &tif)
Definition: tiffsource.cc:91
ColormapHelperBase::Ptr getColormapHelper(const TIFFPtr &tif, uint16_t bps)
Definition: tiffsource.cc:113
static Ptr create(int numberOfColors)
Definition: colormap-helpers.cc:72
const std::string Colormapped
Definition: layerspecforbitmap.cc:56
void TIFFCloseUnlessNull(TIFF *tif)
Definition: tiffsource.cc:52
static Colormap::Ptr create()
Definition: colormappable.hh:48
boost::shared_ptr< TIFF > TIFFPtr
Definition: tiffsource.hh:28
static Ptr createInverted(int numberOfColors)
Definition: colormap-helpers.cc:77
boost::shared_ptr< Colormap > Ptr
Definition: colormappable.hh:31
const Colormap::Ptr colormap
Definition: colormaphelpers_test.cc:54
boost::shared_ptr< ColormapHelperBase > Ptr
Definition: colormappable.hh:160
const std::string CMYK
Definition: layerspecforbitmap.cc:54
static void b(const B::Ptr &)
Definition: gtkhelper-tests.cc:32
static Ptr create(int numberOfColors)
Definition: colormap-helpers.cc:55
const std::string Greyscale
Definition: layerspecforbitmap.cc:55
const std::string RGB
Definition: layerspecforbitmap.cc:53