Perfectly Clear SDK Documentation  10.0.0.495
PFCImageFile.h
Go to the documentation of this file.
1 
3 #ifndef PFCIMAGEFILE_H
4 #define PFCIMAGEFILE_H
5 
6 #ifdef WIN32
7 #if defined(PFCIMAGEFILEDLL_LIBRARY)
8 # define PFCIMAGEFILEDLLSHARED_EXPORT __declspec(dllexport)
9 #else
10 # define PFCIMAGEFILEDLLSHARED_EXPORT __declspec(dllimport)
11 #endif
12 #else
13 # define PFCIMAGEFILEDLLSHARED_EXPORT
14 #endif
15 
16 #include <string>
17 
19 typedef enum {
25 
26 
29 typedef enum {
32  PFC_FLASH_FIRED = 1
34 
68 class PFCIMAGEFILEDLLSHARED_EXPORT PFCImageFile
69 {
70 
71 public:
73  typedef enum {
74  PFC_JPEG = 1,
76  PFC_WEBP
77  } PFC_FILETYPE;
78 
89  PFCImageFile(int width, int height, const PFCImageFile &model);
97  PFCImageFile(int width, int height, int bytes_per_pixel, int stride);
98  ~PFCImageFile();
106  PFC_FILE_LOAD_STATUS LoadImageFile(const char *filename, bool bConvertToSRGB, const char *iccFolderPath);
107 
116  PFC_FILE_LOAD_STATUS LoadImageFile(const char *filename, PFC_FILETYPE type, bool bConvertToSRGB, const char *iccFolderPath);
117 
126  PFC_FILE_LOAD_STATUS ExpandImageBuffer(char *data, long size, PFC_FILETYPE type, bool bConvertToSRGB, const char *iccFolderPath);
127 
136  int CompressImageBuffer(unsigned char** destination, PFC_FILETYPE type, int quality, bool bConvertToOriginalColorSpace, bool bEmbedOriginalMetadata);
137 
145  bool SaveImageFile(const char *filename, int quality, bool bConvertToOriginalColorSpace, bool bEmbedOriginalMetadata);
146 
156  bool SaveImageFile(const char *filename, PFC_FILETYPE type, int quality, bool bConvertToOriginalColorSpace, bool bEmbedOriginalMetadata);
157 
158  void AllocBuffer(int width, int height, int bytes_per_pixel, int stride);
159  int pfcImageFormat();
160  int exifOrientation();
161 
167  unsigned char *raw_image;
169  int width;
171  int height;
175  int stride;
178 
179 
182 
183 private:
184  void init();
185 
186  bool ConvertToSRGB();
187  bool ConvertFromSRGBToOriginal();
188  bool applyColorTransform(void* hTransform);
189 
190  unsigned char* allocDataFromFile(const char* filename, long& size);
191 
192  PFC_FILE_LOAD_STATUS read_jpeg_file( const char *filename, bool bConvertToSRGB, const char *iccFolderPath );
193  int write_jpeg_file( const char *filename, int quality, bool bConvertToOriginalColorSpace, bool bEmbedOriginalMetadata );
194  int compress_jpeg_buffer(unsigned char** destination, int quality, bool bConvertToOriginalColorSpace, bool bEmbedOriginalMetadata );
195  PFC_FILE_LOAD_STATUS expand_jpeg( unsigned char *data, long size, bool bConvertToSRGB, const char *iccFolderPath );
196 
197  PFC_FILE_LOAD_STATUS read_rawdump( const char *filename);
198  PFC_FILE_LOAD_STATUS read_png( const char *filename);
199  PFC_FILE_LOAD_STATUS expand_png(char* data, long size);
200 
201  PFC_FILE_LOAD_STATUS read_webp(const char* filename);
202  PFC_FILE_LOAD_STATUS expand_webp(char* data, long size);
203  int compress_webp(unsigned char** data, float quality);
204  bool write_webp(const char *filename, float quality);
205 
206  bool write_rawdump(const char *basename); // adds dump params to the name: basename.hex -> basename-<w>-<h>-<bpp>.hex
207  bool write_png(const char *filename, bool bConvertToOriginalColorSpace);
208  int compress_png(unsigned char** data, bool bConvertToOriginalColorSpace);
209 
210  void read_exif_data(unsigned char *data, long size, unsigned char **buf, unsigned int *bufLen, bool bFillReferencedICC, int *iEXIFOrientation);
211 
212  void* hTransformToSRGB;
213  void* hTransformSRGBToOriginal;
214  unsigned int embeddedICCLen;
215  unsigned char* embeddedICCBuf;
216 
217  bool bIgnoreNonembeddedIcc; // TODO:
218 
219  std::string originalPath;
220  void* originalExifData;
221 
223  int jpeg_color_space;
225  int m_color_space; //
226  int m_iEXIFOrientation;
227 
228  int m_density_unit; // in exif namesspace
229  int m_x_density;
230  int m_y_density;
231 };
232 
233 #endif // PFCIMAGEFILE_H
PFC_FLASH_FIRED
@ PFC_FLASH_FIRED
1: EXIF data shows flash was used
Definition: PFCImageFile.h:32
PFCImageFile::CompressImageBuffer
int CompressImageBuffer(unsigned char **destination, PFC_FILETYPE type, int quality, bool bConvertToOriginalColorSpace, bool bEmbedOriginalMetadata)
Compresses the image to the given type and writes compressed data to destination buffer.
PFCImageFile::sourceSRGB
bool sourceSRGB
Definition: PFCImageFile.h:177
PFCImageFile::PFCImageFile
PFCImageFile()
Constructs empty PFCImageFile, to be filled with LoadImageFile()
PFC_FILE_LOAD_STATUS
PFC_FILE_LOAD_STATUS
Return status values.
Definition: PFCImageFile.h:19
PFC_FLASH_NOT_FIRED
@ PFC_FLASH_NOT_FIRED
0: EXIF data shows flash was not used
Definition: PFCImageFile.h:31
LOAD_FAILED_CONVERT_SRGB
@ LOAD_FAILED_CONVERT_SRGB
Error: failed to convert to sRGB.
Definition: PFCImageFile.h:23
PFC_FLASH_STATUS
PFC_FLASH_STATUS
Flash status as read if present on the exif section. Specificallly status of bit 0 from exif tag 3738...
Definition: PFCImageFile.h:29
PFCImageFile::raw_image
unsigned char * raw_image
Definition: PFCImageFile.h:167
PFCImageFile::PFCImageFile
PFCImageFile(int width, int height, const PFCImageFile &model)
Constructs PFCImageFile with allocation for image of given size and format.
PFCImageFile::PFC_FILETYPE
PFC_FILETYPE
Type for compressing/decomrpessing a buffer.
Definition: PFCImageFile.h:73
LOAD_ERROR
@ LOAD_ERROR
Error.
Definition: PFCImageFile.h:21
PFCImageFile::ExpandImageBuffer
PFC_FILE_LOAD_STATUS ExpandImageBuffer(char *data, long size, PFC_FILETYPE type, bool bConvertToSRGB, const char *iccFolderPath)
Expands the image file data provided in a buffer.
PFC_FLASH_UNKNOWN
@ PFC_FLASH_UNKNOWN
-1: Cannot determine flash state
Definition: PFCImageFile.h:30
PFCImageFile::stride
int stride
Definition: PFCImageFile.h:175
PFCImageFile::PFCImageFile
PFCImageFile(int width, int height, int bytes_per_pixel, int stride)
Constructs PFCImageFile with allocation for image of given size.
LOAD_ERROR_UNSUPPORTED
@ LOAD_ERROR_UNSUPPORTED
Error: unsupported file.
Definition: PFCImageFile.h:22
PFCImageFile::LoadImageFile
PFC_FILE_LOAD_STATUS LoadImageFile(const char *filename, PFC_FILETYPE type, bool bConvertToSRGB, const char *iccFolderPath)
Load JPEG, PNG or RAW from file on disk.
PFCImageFile::SaveImageFile
bool SaveImageFile(const char *filename, PFC_FILETYPE type, int quality, bool bConvertToOriginalColorSpace, bool bEmbedOriginalMetadata)
Write image data to file - specify file type with PFC_FILETYPE.
PFCImageFile::height
int height
Definition: PFCImageFile.h:171
PFCImageFile::PFC_PNG
@ PFC_PNG
PNG.
Definition: PFCImageFile.h:75
PFCImageFile::width
int width
Definition: PFCImageFile.h:169
PFCImageFile::bytes_per_pixel
int bytes_per_pixel
Definition: PFCImageFile.h:173
PFCImageFile::SaveImageFile
bool SaveImageFile(const char *filename, int quality, bool bConvertToOriginalColorSpace, bool bEmbedOriginalMetadata)
Write image data to file - specify file type with filename extension.
LOAD_OK
@ LOAD_OK
Success.
Definition: PFCImageFile.h:20
PFCImageFile::flashStatus
PFC_FLASH_STATUS flashStatus
flash status from the exif section if present
Definition: PFCImageFile.h:181
PFCImageFile
PFCImageFile Class to encapsulate file handling.
Definition: PFCImageFile.h:69
PFCImageFile::LoadImageFile
PFC_FILE_LOAD_STATUS LoadImageFile(const char *filename, bool bConvertToSRGB, const char *iccFolderPath)
Load JPEG, PNG or RAW from file on disk.