1/* 2 * Copyright 2013, Gerasim Troeglazov, 3dEyes@gmail.com. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 7#ifndef PSD_LOADER_H 8#define PSD_LOADER_H 9 10#include <stdlib.h> 11#include <stdio.h> 12#include <string.h> 13 14#include <Translator.h> 15#include <TranslatorFormats.h> 16#include <TranslationDefs.h> 17#include <GraphicsDefs.h> 18#include <InterfaceDefs.h> 19#include <String.h> 20#include <DataIO.h> 21#include <File.h> 22#include <ByteOrder.h> 23#include <List.h> 24 25#define PSD_MAX_CHANNELS 16 26 27 28enum psd_version { 29 PSD_FILE = 1, 30 PSB_FILE = 2 31}; 32 33 34enum psd_compressed_type { 35 PSD_COMPRESSED_RAW = 0, 36 PSD_COMPRESSED_RLE = 1 37}; 38 39 40enum psd_color_mode { 41 PSD_COLOR_MODE_BITS = 0, 42 PSD_COLOR_MODE_GRAYSCALE = 1, 43 PSD_COLOR_MODE_INDEXED = 2, 44 PSD_COLOR_MODE_RGB = 3, 45 PSD_COLOR_MODE_CMYK = 4, 46 PSD_COLOR_MODE_MULTICHANNEL = 7, 47 PSD_COLOR_MODE_DUOTONE = 8, 48 PSD_COLOR_MODE_LAB = 9 49}; 50 51 52enum psd_color_format { 53 PSD_COLOR_FORMAT_UNSUPPORTED, 54 PSD_COLOR_FORMAT_BITMAP, 55 PSD_COLOR_FORMAT_RGB, 56 PSD_COLOR_FORMAT_RGB_A, 57 PSD_COLOR_FORMAT_GRAY, 58 PSD_COLOR_FORMAT_GRAY_A, 59 PSD_COLOR_FORMAT_MULTICHANNEL, 60 PSD_COLOR_FORMAT_CMYK, 61 PSD_COLOR_FORMAT_CMYK_A, 62 PSD_COLOR_FORMAT_LAB, 63 PSD_COLOR_FORMAT_LAB_A, 64 PSD_COLOR_FORMAT_DUOTONE, 65 PSD_COLOR_FORMAT_INDEXED 66}; 67 68 69class PSDLoader { 70public: 71 PSDLoader(BPositionIO *stream); 72 ~PSDLoader(); 73 74 status_t Decode(BPositionIO *target); 75 bool IsLoaded(void); 76 bool IsSupported(void); 77 78 BString ColorFormatName(void); 79 80private: 81 int64 _GetInt64FromStream(BPositionIO *in); 82 int32 _GetInt32FromStream(BPositionIO *in); 83 int16 _GetInt16FromStream(BPositionIO *in); 84 uint8 _GetUInt8FromStream(BPositionIO *in); 85 int8 _GetInt8FromStream(BPositionIO *in); 86 void _SkipStreamBlock(BPositionIO *in, size_t count); 87 88 status_t _ParseImageResources(void); 89 90 psd_color_format _ColorFormat(void); 91 92 BPositionIO *fStream; 93 uint8 *fStreamBuffer; 94 size_t fStreamSize; 95 size_t fStreamPos; 96 97 size_t fColorModeDataSize; 98 size_t fColorModeDataPos; 99 100 off_t fImageResourceSectionSize; 101 off_t fImageResourceSectionPos; 102 103 int32 fSignature; 104 int16 fVersion; 105 int16 fChannels; 106 int32 fHeight; 107 int32 fWidth; 108 int16 fDepth; 109 int16 fColorFormat; 110 int16 fCompression; 111 112 uint16 fTransparentIndex; 113 114 bool fLoaded; 115}; 116 117 118#endif /* PSD_LOADER_H */ 119