Krita Source Code Documentation
Loading...
Searching...
No Matches
KisTiffPsdLayerRecord Class Reference

#include <kis_tiff_psd_layer_record.h>

Public Member Functions

uint16_t channelDepth () const
 
psd_color_mode colorMode () const
 
 KisTiffPsdLayerRecord (bool isBigEndian, uint32_t width, uint32_t height, uint16_t channelDepth, uint16_t nChannels, uint16_t photometricInterpretation, bool hasTransparency=false)
 
bool read (QIODevice &io)
 
std::shared_ptr< PSDLayerMaskSectionrecord () const
 
bool valid () const
 
bool write (QIODevice &io, KisNodeSP rootLayer, psd_compression_type compressionType)
 

Private Member Functions

template<psd_byte_order byteOrder = psd_byte_order::psdBigEndian>
bool readImpl (QIODevice &device)
 
template<psd_byte_order byteOrder = psd_byte_order::psdBigEndian>
bool writeImpl (QIODevice &device, KisNodeSP rootLayer, psd_compression_type compressionType)
 

Private Attributes

psd_byte_order m_byteOrder
 
uint16_t m_channelDepth
 
psd_color_mode m_colorMode
 
bool m_hasTransparency
 
uint32_t m_height
 
uint16_t m_nChannels
 
std::shared_ptr< PSDLayerMaskSectionm_record
 
bool m_valid
 
uint32_t m_width
 

Detailed Description

Definition at line 19 of file kis_tiff_psd_layer_record.h.

Constructor & Destructor Documentation

◆ KisTiffPsdLayerRecord()

KisTiffPsdLayerRecord::KisTiffPsdLayerRecord ( bool isBigEndian,
uint32_t width,
uint32_t height,
uint16_t channelDepth,
uint16_t nChannels,
uint16_t photometricInterpretation,
bool hasTransparency = false )

Definition at line 21 of file kis_tiff_psd_layer_record.cpp.

29 , m_width(width)
30 , m_height(height)
32 , m_nChannels(nChannels)
33 , m_hasTransparency(hasTransparency)
34 , m_valid(false)
35{
36 if (photometricInterpretation == PHOTOMETRIC_MINISWHITE || photometricInterpretation == PHOTOMETRIC_MINISBLACK) {
38 } else if (photometricInterpretation == PHOTOMETRIC_RGB) {
40 } else if (photometricInterpretation == PHOTOMETRIC_SEPARATED) {
41 dbgFile << "PSD warning: assuming CMYK for color separations";
43 } else if (photometricInterpretation == PHOTOMETRIC_CIELAB || photometricInterpretation == PHOTOMETRIC_ICCLAB) {
45 } else if (photometricInterpretation == PHOTOMETRIC_PALETTE) {
47 } else {
48 dbgFile << "TIFF PSD error: " << photometricInterpretation << "does not map to a Photoshop supported mode";
50 }
51}
#define dbgFile
Definition kis_debug.h:53
psd_byte_order
Definition psd.h:33
@ Lab
Definition psd.h:58
@ RGB
Definition psd.h:54
@ CMYK
Definition psd.h:55
@ COLORMODE_UNKNOWN
Definition psd.h:65
@ Indexed
Definition psd.h:53
@ Grayscale
Definition psd.h:52

References CMYK, COLORMODE_UNKNOWN, dbgFile, Grayscale, Indexed, Lab, m_colorMode, and RGB.

Member Function Documentation

◆ channelDepth()

uint16_t KisTiffPsdLayerRecord::channelDepth ( ) const
inline

Definition at line 41 of file kis_tiff_psd_layer_record.h.

42 {
43 return m_channelDepth;
44 }

◆ colorMode()

psd_color_mode KisTiffPsdLayerRecord::colorMode ( ) const
inline

Definition at line 36 of file kis_tiff_psd_layer_record.h.

37 {
38 return m_colorMode;
39 }

◆ read()

bool KisTiffPsdLayerRecord::read ( QIODevice & io)

Definition at line 53 of file kis_tiff_psd_layer_record.cpp.

54{
55 switch (m_byteOrder) {
57 return readImpl<psd_byte_order::psdLittleEndian>(io);
58 default:
59 return readImpl(io);
60 }
61}
bool readImpl(QIODevice &device)

References m_byteOrder, psdLittleEndian, and readImpl().

◆ readImpl()

template<psd_byte_order byteOrder>
bool KisTiffPsdLayerRecord::readImpl ( QIODevice & device)
private

Definition at line 74 of file kis_tiff_psd_layer_record.cpp.

75{
76 PSDHeader header;
77 header.version = 1;
78 header.byteOrder = byteOrder;
79 header.width = m_width;
80 header.height = m_height;
82 header.nChannels = m_nChannels;
83 header.colormode = m_colorMode;
84 header.tiffStyleLayerBlock = true;
85 m_record = std::make_shared<PSDLayerMaskSection>(header);
86
87 QLatin1String signature("Adobe Photoshop Document Data Block");
88 QByteArray b = device.read(signature.size() + 1);
89 if (b.size() != signature.size() + 1 || QLatin1String(b) != signature) {
90 m_record->error = QString("Invalid Photoshop data block: %1").arg(QLatin1String(b));
91 return false;
92 }
93
94 if (!m_record->read(device)) {
95 dbgFile << "failed reading PSD section: " << m_record->error;
96 return false;
97 }
98
99 dbgFile << "Resource section: " << m_record->nLayers;
100
101 m_valid = true;
102
103 return true;
104}
std::shared_ptr< PSDLayerMaskSection > m_record
psd_color_mode colormode
Definition psd_header.h:48
quint16 channelDepth
Definition psd_header.h:47
quint16 version
Definition psd_header.h:43
bool tiffStyleLayerBlock
Definition psd_header.h:50
quint16 nChannels
Definition psd_header.h:44
quint32 height
Definition psd_header.h:45
quint32 width
Definition psd_header.h:46
psd_byte_order byteOrder
Definition psd_header.h:49

References PSDHeader::byteOrder, PSDHeader::channelDepth, PSDHeader::colormode, dbgFile, PSDHeader::height, m_channelDepth, m_colorMode, m_height, m_nChannels, m_record, m_valid, m_width, PSDHeader::nChannels, PSDHeader::tiffStyleLayerBlock, PSDHeader::version, and PSDHeader::width.

◆ record()

std::shared_ptr< PSDLayerMaskSection > KisTiffPsdLayerRecord::record ( ) const

Definition at line 142 of file kis_tiff_psd_layer_record.cpp.

143{
144 return m_record;
145}

References m_record.

◆ valid()

bool KisTiffPsdLayerRecord::valid ( ) const

Definition at line 147 of file kis_tiff_psd_layer_record.cpp.

148{
149 return m_valid;
150}

References m_valid.

◆ write()

bool KisTiffPsdLayerRecord::write ( QIODevice & io,
KisNodeSP rootLayer,
psd_compression_type compressionType )

Definition at line 63 of file kis_tiff_psd_layer_record.cpp.

64{
65 switch (m_byteOrder) {
67 return writeImpl<psd_byte_order::psdLittleEndian>(io, rootLayer, compressionType);
68 default:
69 return writeImpl(io, rootLayer, compressionType);
70 }
71}
bool writeImpl(QIODevice &device, KisNodeSP rootLayer, psd_compression_type compressionType)

References m_byteOrder, psdLittleEndian, and writeImpl().

◆ writeImpl()

template<psd_byte_order byteOrder>
bool KisTiffPsdLayerRecord::writeImpl ( QIODevice & device,
KisNodeSP rootLayer,
psd_compression_type compressionType )
private

Definition at line 107 of file kis_tiff_psd_layer_record.cpp.

108{
109 PSDHeader header;
110 header.version = 1;
111 header.byteOrder = byteOrder;
112 header.width = m_width;
113 header.height = m_height;
115 header.nChannels = m_nChannels;
116 header.colormode = m_colorMode;
117 header.tiffStyleLayerBlock = true;
118 m_record = std::make_shared<PSDLayerMaskSection>(header);
119 m_record->hasTransparency = m_hasTransparency;
120
121 QBuffer buf;
122 buf.open(QIODevice::WriteOnly);
123
124 psdwrite(buf, "Adobe Photoshop Document Data Block");
125 psdpad(buf, 1);
126
127 if (!m_record->write(buf, rootLayer, compressionType)) {
128 dbgFile << "failed writing PSD section: " << m_record->error;
129 return false;
130 }
131
132 buf.close();
133
134 // Then get the size
135 qint64 layerSectionLength = buf.size();
136 dbgFile << "layer section has size" << layerSectionLength;
137
138 // and write the whole buffer
139 return (device.write(buf.data()) == layerSectionLength);
140}
bool psdpad(QIODevice &io, quint32 padding)
Definition psd_utils.h:248
std::enable_if_t< std::is_arithmetic< T >::value, bool > psdwrite(QIODevice &io, T v)
Definition psd_utils.h:170

References PSDHeader::byteOrder, PSDHeader::channelDepth, PSDHeader::colormode, dbgFile, PSDHeader::height, m_channelDepth, m_colorMode, m_hasTransparency, m_height, m_nChannels, m_record, m_width, PSDHeader::nChannels, psdpad(), psdwrite(), PSDHeader::tiffStyleLayerBlock, PSDHeader::version, and PSDHeader::width.

Member Data Documentation

◆ m_byteOrder

psd_byte_order KisTiffPsdLayerRecord::m_byteOrder
private

Definition at line 49 of file kis_tiff_psd_layer_record.h.

◆ m_channelDepth

uint16_t KisTiffPsdLayerRecord::m_channelDepth
private

Definition at line 52 of file kis_tiff_psd_layer_record.h.

◆ m_colorMode

psd_color_mode KisTiffPsdLayerRecord::m_colorMode
private

Definition at line 54 of file kis_tiff_psd_layer_record.h.

◆ m_hasTransparency

bool KisTiffPsdLayerRecord::m_hasTransparency
private

Definition at line 56 of file kis_tiff_psd_layer_record.h.

◆ m_height

uint32_t KisTiffPsdLayerRecord::m_height
private

Definition at line 51 of file kis_tiff_psd_layer_record.h.

◆ m_nChannels

uint16_t KisTiffPsdLayerRecord::m_nChannels
private

Definition at line 53 of file kis_tiff_psd_layer_record.h.

◆ m_record

std::shared_ptr<PSDLayerMaskSection> KisTiffPsdLayerRecord::m_record
private

Definition at line 55 of file kis_tiff_psd_layer_record.h.

◆ m_valid

bool KisTiffPsdLayerRecord::m_valid
private

Definition at line 57 of file kis_tiff_psd_layer_record.h.

◆ m_width

uint32_t KisTiffPsdLayerRecord::m_width
private

Definition at line 50 of file kis_tiff_psd_layer_record.h.


The documentation for this class was generated from the following files: