SlideIO 2.0.0
Open-source library for reading of medical images
Loading...
Searching...
No Matches
tifftools.hpp
1// This file is part of slideio project.
2// It is subject to the license terms in the LICENSE file found in the top-level directory
3// of this distribution and at http://slideio.com/license.html.
4#pragma once
5
6#include <map>
7
8#include "slideio/imagetools/slideio_imagetools_def.hpp"
9#include "slideio/base/resolution.hpp"
10#include "slideio/base/slideio_enums.hpp"
11#include "slideio/base/base.hpp"
12#include <opencv2/core.hpp>
13#include <string>
14#include <vector>
15
16#include "imagetools.hpp"
17
18namespace libtiff
19{
20 struct tiff;
21 typedef tiff TIFF;
22}
23
24namespace slideio
25{
26 struct TiffDirectory
27 {
28 int width = 0;
29 int height = 0;
30 bool tiled = false;
31 int tileWidth = 0;
32 int tileHeight = 0;
33 int channels = 0;
34 int bitsPerSample = 0;
35 int photometric = 0;
36 int YCbCrSubsampling[2];
37 int subFileType = 0;
38 uint32_t compression = 0;
39 Compression slideioCompression;
40 int dirIndex = 0;
41 int64 offset = 0;
42 std::string description;
43 std::string software;
44 std::vector<TiffDirectory> subdirectories;
45 Resolution res = {};
46 cv::Point2d position = {};
47 bool interleaved = false;
48 int rowsPerStrip = 0;
49 DataType dataType = DataType::DT_Unknown;
50 int stripSize = 0;
51 int compressionQuality = 0;
52 uint64_t byteOffset = 0;
53 };
54
55 SLIDEIO_IMAGETOOLS_EXPORTS std::ostream& operator<<(std::ostream& os, const TiffDirectory& dir);
56 SLIDEIO_IMAGETOOLS_EXPORTS std::ostream& operator<<(std::ostream& os, const std::vector<TiffDirectory>& dirs);
57
58 class SLIDEIO_IMAGETOOLS_EXPORTS TiffTools
59 {
60 public:
61 static libtiff::TIFF* openTiffFile(const std::string& path, bool readOnly=true);
62 static void closeTiffFile(libtiff::TIFF* file);
63 static void setCurrentDirectory(libtiff::TIFF* tiff, int dirIndex, int64_t dirOffset);
64 static void scanTiffDirTags(libtiff::TIFF* tiff, int dirIndex, int64_t dirOffset, slideio::TiffDirectory& dir);
65 static void scanTiffDir(libtiff::TIFF* tiff, int dirIndex, int64_t dirOffset, slideio::TiffDirectory& dir);
66 static void scanFile(libtiff::TIFF* file, std::vector<TiffDirectory>& directories);
67 static void scanFile(const std::string& filePath, std::vector<TiffDirectory>& directories);
68 static void readNotRGBStripedDir(libtiff::TIFF* tiff, const TiffDirectory& dir, cv::_OutputArray output);
69 static void readRegularStripedDir(libtiff::TIFF* file, const slideio::TiffDirectory& dir, cv::OutputArray output);
70 static void readPlanarStripedDir(libtiff::TIFF* tiff, const TiffDirectory& dir, cv::OutputArray output);
71 static void readDirRaster(const std::string& filePath, int dir, cv::OutputArray output);
72 static void readDirRaster(libtiff::TIFF* tiff, const TiffDirectory& dir, cv::OutputArray output);
73 static void readTiledDir(libtiff::TIFF* tiff, const TiffDirectory& dir, cv::OutputArray output);
74 static void readStripedDir(libtiff::TIFF* file, const slideio::TiffDirectory& dir, cv::OutputArray output);
75 static void readTile(libtiff::TIFF* hFile, const slideio::TiffDirectory& dir, int tile,
76 const std::vector<int>& channelIndices, cv::OutputArray output);
77 static void setCurrentDirectory(libtiff::TIFF* hFile, const slideio::TiffDirectory& dir);
78 static void scaleBlockToDirectory(const TiffDirectory& basisDir, const TiffDirectory& dir,
79 const cv::Rect& basisDirRect, cv::Rect& dirBlockRect);
80 static void readJ2KTile(libtiff::TIFF* hFile, const slideio::TiffDirectory& dir, int tile,
81 const std::vector<int>& channelIndices, cv::OutputArray output);
82 static void readRegularTile(libtiff::TIFF* hFile, const slideio::TiffDirectory& dir, int tile,
83 const std::vector<int>& channelIndices, cv::OutputArray output);
84 static void readNotRGBTile(libtiff::TIFF* hFile, const slideio::TiffDirectory& dir, int tile,
85 const std::vector<int>& channelIndices, cv::OutputArray output);
86 static void writeDirectory(libtiff::TIFF* tiff);
87 static void setTags(libtiff::TIFF* tiff, const TiffDirectory& dir);
88 static void initSubDirs(libtiff::TIFF* tiff, int numDirs);
89 static void writeTile(libtiff::TIFF* tiff, int x, int y, Compression compression,
90 const cv::Mat& tileRaster, const EncodeParameters& parameters,
91 uint8_t* buffer=nullptr, int bufferSize=0);
92 static std::string readStringTag(libtiff::TIFF* tiff, uint16_t tag);
93 static int getNumberOfDirectories(libtiff::TIFF* tiff);
94 static void writeRawTile(libtiff::TIFF* tiff, int x, int y, const uint8_t* data, int size);
95 };
96}
Definition: exceptions.hpp:15
Compression
raster data compression enum
Definition: slideio_enums.hpp:12