Perfectly Clear SDK Documentation  10.7.1.1191
PFCImageFile.h
Go to the documentation of this file.
1 
6 #ifndef PFCIMAGEFILE_H
7 #define PFCIMAGEFILE_H
8 
9 #ifdef WIN32
10 #if defined(PFCIMAGEFILEDLL_LIBRARY)
11 # define PFCIMAGEFILEDLLSHARED_EXPORT __declspec(dllexport)
12 #else
13 # define PFCIMAGEFILEDLLSHARED_EXPORT __declspec(dllimport)
14 #endif
15 #else
16 # define PFCIMAGEFILEDLLSHARED_EXPORT
17 #endif
18 
19 #include <string>
20 
22 typedef enum {
28 
29 
32 typedef enum {
35  PFC_FLASH_FIRED = 1
37 
71 class PFCIMAGEFILEDLLSHARED_EXPORT PFCImageFile
72 {
73 
74 public:
76  typedef enum {
77  PFC_JPEG = 1,
79  PFC_WEBP
80  } PFC_FILETYPE;
81 
92  PFCImageFile(int width, int height, const PFCImageFile &model);
100  PFCImageFile(int width, int height, int bytes_per_pixel, int stride);
101  ~PFCImageFile();
109  PFC_FILE_LOAD_STATUS LoadImageFile(const char *filename, bool bConvertToSRGB, const char *iccFolderPath);
110 
119  PFC_FILE_LOAD_STATUS LoadImageFile(const char *filename, PFC_FILETYPE type, bool bConvertToSRGB, const char *iccFolderPath);
120 
129  PFC_FILE_LOAD_STATUS ExpandImageBuffer(char *data, long size, PFC_FILETYPE type, bool bConvertToSRGB, const char *iccFolderPath);
130 
139  int CompressImageBuffer(unsigned char** destination, PFC_FILETYPE type, int quality, bool bConvertToOriginalColorSpace, bool bEmbedOriginalMetadata);
140 
148  bool SaveImageFile(const char *filename, int quality, bool bConvertToOriginalColorSpace, bool bEmbedOriginalMetadata);
149 
159  bool SaveImageFile(const char *filename, PFC_FILETYPE type, int quality, bool bConvertToOriginalColorSpace, bool bEmbedOriginalMetadata);
160 
161 
166  bool SetOutputIccProfile(const char* filename);
167 
168  void AllocBuffer(int width, int height, int bytes_per_pixel, int stride);
169  int pfcImageFormat();
176  int iISO();
179  const char *cameraModel();
182  const char *exifSoftware();
183 
189  unsigned char *raw_image;
191  int width;
193  int height;
197  int stride;
200 
201 
204 
206  // This might be expensive, disabled by default. This also sets hasSourceThumbnai to false regardless
207  // if it has an image or not.
209 
216 
226 
227 private:
228  void init();
229 
230  bool ConvertToSRGB();
231  bool ConvertFromSRGBToOriginal();
232  bool ConvertFromSRGBToOutput();
233  bool applyColorTransform(void* hTransform);
234 
235  unsigned char* allocDataFromFile(const char* filename, long& size) const;
236 
237  PFC_FILE_LOAD_STATUS read_jpeg_file( const char *filename, bool bConvertToSRGB, const char *iccFolderPath );
238  int write_jpeg_file( const char *filename, int quality, bool bConvertToOriginalColorSpace, bool bEmbedOriginalMetadata );
239  int compress_jpeg_buffer(unsigned char** destination, int quality, bool bConvertToOriginalColorSpace, bool bEmbedOriginalMetadata );
240  PFC_FILE_LOAD_STATUS expand_jpeg( unsigned char *data, long size, bool bConvertToSRGB, const char *iccFolderPath );
241 
242  PFC_FILE_LOAD_STATUS read_rawdump( const char *filename);
243  PFC_FILE_LOAD_STATUS read_png( const char *filename);
244  PFC_FILE_LOAD_STATUS expand_png(char* data, long size);
245 
246  PFC_FILE_LOAD_STATUS read_webp(const char* filename);
247  PFC_FILE_LOAD_STATUS expand_webp(char* data, long size);
248  int compress_webp(unsigned char** data, float quality);
249  bool write_webp(const char *filename, float quality);
250 
251  bool write_rawdump(const char *basename); // adds dump params to the name: basename.hex -> basename-<w>-<h>-<bpp>.hex
252  bool write_png(const char *filename, bool bConvertToOriginalColorSpace);
253  int compress_png(unsigned char** data, bool bConvertToOriginalColorSpace);
254 
255  void read_exif_data(unsigned char *data, long size, unsigned char **buf, unsigned int *bufLen, bool bFillReferencedICC, int *iEXIFOrientation);
256 
257  void* hTransformToSRGB;
258  void* hTransformSRGBToOriginal;
259 
260  unsigned int embeddedICCLen;
261  unsigned char* embeddedICCBuf;
262 
263  unsigned int iccInputFormat;
264  unsigned int iccOutputFormat;
265  unsigned int outputICCLen;
266  unsigned char* outputICCBuf;
267 
268  bool bIgnoreNonembeddedIcc; // TODO:
269 
270  std::string originalPath;
271  void* originalExifData;
272  void* originalIptcData;
273 
275  int jpeg_color_space;
277  int m_color_space; //
278  int m_iEXIFOrientation;
279 
280  int m_density_unit; // in exif namesspace
281  int m_x_density;
282  int m_y_density;
283  int m_ifdbXDensity;
284  int m_ifdbYDensity;
285  int m_jfif_density_unit;
286  int m_jfif_x_density;
287  int m_jfif_y_density;
288  int m_iISO;
289  std::string m_cameraModel;
290  std::string m_exifSoftware;
291 
292  void embedUpdatedThumbnail(void* ed);
293 };
294 
295 #endif // PFCIMAGEFILE_H
PFCImageFile::cameraModel
const char * cameraModel()
PFC_FLASH_FIRED
@ PFC_FLASH_FIRED
1: EXIF data shows flash was used
Definition: PFCImageFile.h:35
PFCImageFile::sourceThumbnailWidth
int sourceThumbnailWidth
width of the loaded image thumbnail
Definition: PFCImageFile.h:213
PFCImageFile::sourceThumbnailHeight
int sourceThumbnailHeight
height of the loaded image thumnail
Definition: PFCImageFile.h:215
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:199
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:22
PFC_FLASH_NOT_FIRED
@ PFC_FLASH_NOT_FIRED
0: EXIF data shows flash was not used
Definition: PFCImageFile.h:34
LOAD_FAILED_CONVERT_SRGB
@ LOAD_FAILED_CONVERT_SRGB
Error: failed to convert to sRGB.
Definition: PFCImageFile.h:26
PFCImageFile::expandThumbnailImage
bool expandThumbnailImage
expand the thumbnailImage to get thumbnail dimensions and check validity.
Definition: PFCImageFile.h:208
PFCImageFile::exifSoftware
const char * exifSoftware()
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:32
PFCImageFile::raw_image
unsigned char * raw_image
Definition: PFCImageFile.h:189
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:76
PFCImageFile::outputThumbnailBuffer
void * outputThumbnailBuffer
sets the jpeg compressed image content&#160;for the thumbnail to embed when saving the image....
Definition: PFCImageFile.h:223
LOAD_ERROR
@ LOAD_ERROR
Error.
Definition: PFCImageFile.h:24
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:33
PFCImageFile::hasSourceThumbnail
bool hasSourceThumbnail
set to true after loading an image and it has a valid jpeg thumbnail
Definition: PFCImageFile.h:211
PFCImageFile::stride
int stride
Definition: PFCImageFile.h:197
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:25
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::outputThumbnailBufferSize
int outputThumbnailBufferSize
size of the compressed image content
Definition: PFCImageFile.h:225
PFCImageFile::SetOutputIccProfile
bool SetOutputIccProfile(const char *filename)
loads the desired ICC profile from the given path for the output image
PFCImageFile::exifOrientation
int exifOrientation()
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:193
PFCImageFile::PFC_PNG
@ PFC_PNG
PNG.
Definition: PFCImageFile.h:78
PFCImageFile::width
int width
Definition: PFCImageFile.h:191
PFCImageFile::bytes_per_pixel
int bytes_per_pixel
Definition: PFCImageFile.h:195
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:23
PFCImageFile::flashStatus
PFC_FLASH_STATUS flashStatus
flash status from the exif section if present
Definition: PFCImageFile.h:203
PFCImageFile
PFCImageFile Class to encapsulate file handling.
Definition: PFCImageFile.h:72
PFCImageFile::iISO
int iISO()
PFCImageFile::LoadImageFile
PFC_FILE_LOAD_STATUS LoadImageFile(const char *filename, bool bConvertToSRGB, const char *iccFolderPath)
Load JPEG, PNG or RAW from file on disk.