libpgf 6.14.12
PGF - Progressive Graphics File
PGFimage.h
Go to the documentation of this file.
1/*
2 * The Progressive Graphics File; http://www.libpgf.org
3 *
4 * $Date: 2007-02-03 13:04:21 +0100 (Sa, 03 Feb 2007) $
5 * $Revision: 280 $
6 *
7 * This file Copyright (C) 2006 xeraina GmbH, Switzerland
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE
11 * as published by the Free Software Foundation; either version 2.1
12 * of the License, or (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22 */
23
28
29#ifndef PGF_PGFIMAGE_H
30#define PGF_PGFIMAGE_H
31
32#include "PGFstream.h"
33
35// types
37
39// prototypes
40class CDecoder;
41class CEncoder;
43
57class CPGFImage {
58public:
59
62 CPGFImage();
63
66 virtual ~CPGFImage();
67
71 virtual void Close();
72
76 virtual void Destroy();
77
83 void Open(CPGFStream* stream) THROW_;
84
87 bool IsOpen() const { return m_decoder != NULL; }
88
101 void Read(int level = 0, CallbackPtr cb = NULL, void *data = NULL) THROW_;
102
103#ifdef __PGFROISUPPORT__
113 void Read(PGFRect& rect, int level = 0, CallbackPtr cb = NULL, void *data = NULL) THROW_;
114#endif
115
121 void ReadPreview() THROW_ { Read(Levels() - 1); }
122
128 void Reconstruct(int level = 0) THROW_;
129
147 void GetBitmap(int pitch, UINT8* buff, BYTE bpp, int channelMap[] = NULL, CallbackPtr cb = NULL, void *data = NULL) const THROW_; // throws IOException
148
164 void GetYUV(int pitch, DataT* buff, BYTE bpp, int channelMap[] = NULL, CallbackPtr cb = NULL, void *data = NULL) const THROW_; // throws IOException
165
182 void ImportBitmap(int pitch, UINT8 *buff, BYTE bpp, int channelMap[] = NULL, CallbackPtr cb = NULL, void *data = NULL) THROW_;
183
199 void ImportYUV(int pitch, DataT *buff, BYTE bpp, int channelMap[] = NULL, CallbackPtr cb = NULL, void *data = NULL) THROW_;
200
214 void Write(CPGFStream* stream, UINT32* nWrittenBytes = NULL, CallbackPtr cb = NULL, void *data = NULL) THROW_;
215
223 UINT32 WriteHeader(CPGFStream* stream) THROW_;
224
235 UINT32 WriteImage(CPGFStream* stream, CallbackPtr cb = NULL, void *data = NULL) THROW_;
236
237#ifdef __PGFROISUPPORT__
253 UINT32 Write(int level, CallbackPtr cb = NULL, void *data = NULL) THROW_;
254#endif
255
260 void ConfigureEncoder(bool useOMP = true, bool favorSpeedOverSize = false) { m_useOMPinEncoder = useOMP; m_favorSpeedOverSize = favorSpeedOverSize; }
261
266 void ConfigureDecoder(bool useOMP = true, bool skipUserData = false) { m_useOMPinDecoder = useOMP; m_skipUserData = skipUserData; }
267
270 void ResetStreamPos() THROW_;
271
276 void SetChannel(DataT* channel, int c = 0) { ASSERT(c >= 0 && c < MaxChannels); m_channel[c] = channel; }
277
286 void SetHeader(const PGFHeader& header, BYTE flags = 0, UINT8* userData = 0, UINT32 userDataLength = 0) THROW_; // throws IOException
287
292 void SetMaxValue(UINT32 maxValue);
293
301
307 void SetRefreshCallback(RefreshCB callback, void* arg) { m_cb = callback; m_cbArg = arg; }
308
315 void SetColorTable(UINT32 iFirstColor, UINT32 nColors, const RGBQUAD* prgbColors) THROW_;
316
321 DataT* GetChannel(int c = 0) { ASSERT(c >= 0 && c < MaxChannels); return m_channel[c]; }
322
329 void GetColorTable(UINT32 iFirstColor, UINT32 nColors, RGBQUAD* prgbColors) const THROW_;
330
332 // Returns address of internal color table
334 const RGBQUAD* GetColorTable() const { return m_postHeader.clut; }
335
339 const PGFHeader* GetHeader() const { return &m_header; }
340
345 UINT32 GetMaxValue() const { return (1 << m_header.usedBitsPerChannel) - 1; }
346
350 UINT64 GetUserDataPos() const { return m_userDataPos; }
351
357 const UINT8* GetUserData(UINT32& size) const;
358
363 UINT32 GetEncodedHeaderLength() const;
364
370 UINT32 GetEncodedLevelLength(int level) const { ASSERT(level >= 0 && level < m_header.nLevels); return m_levelLength[m_header.nLevels - level - 1]; }
371
379 UINT32 ReadEncodedHeader(UINT8* target, UINT32 targetLen) const THROW_;
380
390 UINT32 ReadEncodedData(int level, UINT8* target, UINT32 targetLen) const THROW_;
391
397 UINT32 ChannelWidth(int c = 0) const { ASSERT(c >= 0 && c < MaxChannels); return m_width[c]; }
398
404 UINT32 ChannelHeight(int c = 0) const { ASSERT(c >= 0 && c < MaxChannels); return m_height[c]; }
405
410
416 UINT32 Width(int level = 0) const { ASSERT(level >= 0); return LevelWidth(m_header.width, level); }
417
423 UINT32 Height(int level = 0) const { ASSERT(level >= 0); return LevelHeight(m_header.height, level); }
424
430 BYTE Level() const { return (BYTE)m_currentLevel; }
431
435 BYTE Levels() const { return m_header.nLevels; }
436
441 BYTE Quality() const { return m_header.quality; }
442
447 BYTE Channels() const { return m_header.channels; }
448
454 BYTE Mode() const { return m_header.mode; }
455
460 BYTE BPP() const { return m_header.bpp; }
461
465 bool ROIisSupported() const { return (m_preHeader.version & PGFROI) == PGFROI; }
466
471 BYTE UsedBitsPerChannel() const;
472
476 BYTE Version() const { return CurrentVersion(m_preHeader.version); }
477
478 //class methods
479
484 static bool ImportIsSupported(BYTE mode);
485
491 static UINT32 LevelWidth(UINT32 width, int level) { ASSERT(level >= 0); UINT32 w = (width >> level); return ((w << level) == width) ? w : w + 1; }
492
498 static UINT32 LevelHeight(UINT32 height, int level) { ASSERT(level >= 0); UINT32 h = (height >> level); return ((h << level) == height) ? h : h + 1; }
499
503 static BYTE CurrentVersion(BYTE version = PGFVersion);
504
508 static BYTE CurrentChannelDepth(BYTE version = PGFVersion) { return (version & PGF32) ? 32 : 16; }
509
510protected:
523 BYTE m_quant;
529#ifdef __PGFROISUPPORT__
532#endif
533
534private:
536 void *m_cbArg;
537 double m_percent;
539
540 void ComputeLevels();
541 void CompleteHeader();
542 void RgbToYuv(int pitch, UINT8* rgbBuff, BYTE bpp, int channelMap[], CallbackPtr cb, void *data) THROW_;
543 void Downsample(int nChannel);
544 UINT32 UpdatePostHeaderSize() THROW_;
545 void WriteLevel() THROW_;
546
547#ifdef __PGFROISUPPORT__
548 void SetROI(PGFRect rect);
549#endif
550
551 UINT8 Clamp4(DataT v) const {
552 if (v & 0xFFFFFFF0) return (v < 0) ? (UINT8)0: (UINT8)15; else return (UINT8)v;
553 }
554 UINT16 Clamp6(DataT v) const {
555 if (v & 0xFFFFFFC0) return (v < 0) ? (UINT16)0: (UINT16)63; else return (UINT16)v;
556 }
557 UINT8 Clamp8(DataT v) const {
558 // needs only one test in the normal case
559 if (v & 0xFFFFFF00) return (v < 0) ? (UINT8)0 : (UINT8)255; else return (UINT8)v;
560 }
561 UINT16 Clamp16(DataT v) const {
562 if (v & 0xFFFF0000) return (v < 0) ? (UINT16)0: (UINT16)65535; else return (UINT16)v;
563 }
564 UINT32 Clamp31(DataT v) const {
565 return (v < 0) ? 0 : (UINT32)v;
566 }
567};
568
569#endif //PGF_PGFIMAGE_H
ProgressMode
Definition: PGFimage.h:36
@ PM_Relative
Definition: PGFimage.h:36
@ PM_Absolute
Definition: PGFimage.h:36
PGF stream class.
#define PGFROI
supports Regions Of Interest
Definition: PGFtypes.h:64
void(* RefreshCB)(void *p)
Definition: PGFtypes.h:224
#define MaxChannels
maximum number of (color) channels
Definition: PGFtypes.h:58
#define PGF32
32 bit values are used -> allows at maximum 31 bits, otherwise 16 bit values are used -> allows at ma...
Definition: PGFtypes.h:63
#define PGFVersion
current standard version
Definition: PGFtypes.h:69
INT32 DataT
Definition: PGFtypes.h:219
PGF decoder.
Definition: Decoder.h:46
PGF encoder.
Definition: Encoder.h:46
PGF main class.
Definition: PGFimage.h:57
bool m_useOMPinDecoder
use Open MP in decoder
Definition: PGFimage.h:527
void CompleteHeader()
Definition: PGFimage.cpp:208
UINT32 Clamp31(DataT v) const
Definition: PGFimage.h:564
void SetColorTable(UINT32 iFirstColor, UINT32 nColors, const RGBQUAD *prgbColors) THROW_
Definition: PGFimage.cpp:1305
UINT32 WriteImage(CPGFStream *stream, CallbackPtr cb=NULL, void *data=NULL) THROW_
Definition: PGFimage.cpp:1091
UINT32 ChannelHeight(int c=0) const
Definition: PGFimage.h:404
CDecoder * m_decoder
PGF decoder.
Definition: PGFimage.h:513
void RgbToYuv(int pitch, UINT8 *rgbBuff, BYTE bpp, int channelMap[], CallbackPtr cb, void *data) THROW_
Definition: PGFimage.cpp:1330
void SetHeader(const PGFHeader &header, BYTE flags=0, UINT8 *userData=0, UINT32 userDataLength=0) THROW_
Definition: PGFimage.cpp:843
bool m_useOMPinEncoder
use Open MP in encoder
Definition: PGFimage.h:526
UINT16 Clamp6(DataT v) const
Definition: PGFimage.h:554
UINT32 * m_levelLength
length of each level in bytes; first level starts immediately after this array
Definition: PGFimage.h:515
UINT32 m_height[MaxChannels]
height of each channel at current level
Definition: PGFimage.h:517
void ReadPreview() THROW_
Definition: PGFimage.h:121
PGFHeader m_header
PGF file header.
Definition: PGFimage.h:519
virtual ~CPGFImage()
Destructor: Destroy internal data structures.
Definition: PGFimage.cpp:98
void Downsample(int nChannel)
Definition: PGFimage.cpp:759
UINT32 GetMaxValue() const
Definition: PGFimage.h:345
UINT64 GetUserDataPos() const
Definition: PGFimage.h:350
UINT32 UpdatePostHeaderSize() THROW_
Definition: PGFimage.cpp:1066
int m_currentLevel
transform level of current image
Definition: PGFimage.h:522
void SetChannel(DataT *channel, int c=0)
Definition: PGFimage.h:276
UINT32 ReadEncodedHeader(UINT8 *target, UINT32 targetLen) const THROW_
Definition: PGFimage.cpp:624
void ConfigureEncoder(bool useOMP=true, bool favorSpeedOverSize=false)
Definition: PGFimage.h:260
UINT32 Width(int level=0) const
Definition: PGFimage.h:416
void WriteLevel() THROW_
Definition: PGFimage.cpp:1011
DataT * m_channel[MaxChannels]
untransformed channels in YUV format
Definition: PGFimage.h:512
void Write(CPGFStream *stream, UINT32 *nWrittenBytes=NULL, CallbackPtr cb=NULL, void *data=NULL) THROW_
Definition: PGFimage.cpp:1162
UINT32 ChannelWidth(int c=0) const
Definition: PGFimage.h:397
static BYTE CurrentVersion(BYTE version=PGFVersion)
Return version.
Definition: PGFimage.cpp:719
UINT32 WriteHeader(CPGFStream *stream) THROW_
Definition: PGFimage.cpp:922
void * m_cbArg
refresh callback argument
Definition: PGFimage.h:536
BYTE Level() const
Definition: PGFimage.h:430
const UINT8 * GetUserData(UINT32 &size) const
Definition: PGFimage.cpp:321
virtual void Destroy()
Definition: PGFimage.cpp:105
static UINT32 LevelWidth(UINT32 width, int level)
Definition: PGFimage.h:491
BYTE m_quant
quantization parameter
Definition: PGFimage.h:523
static bool ImportIsSupported(BYTE mode)
Definition: PGFimage.cpp:1246
BYTE ChannelDepth() const
Definition: PGFimage.h:409
static UINT32 LevelHeight(UINT32 height, int level)
Definition: PGFimage.h:498
UINT16 Clamp16(DataT v) const
Definition: PGFimage.h:561
static BYTE CurrentChannelDepth(BYTE version=PGFVersion)
Definition: PGFimage.h:508
bool m_favorSpeedOverSize
favor encoding speed over compression ratio
Definition: PGFimage.h:525
void SetMaxValue(UINT32 maxValue)
Definition: PGFimage.cpp:689
BYTE UsedBitsPerChannel() const
Definition: PGFimage.cpp:707
BYTE Quality() const
Definition: PGFimage.h:441
CEncoder * m_encoder
PGF encoder.
Definition: PGFimage.h:514
bool IsOpen() const
Returns true if the PGF has been opened and not closed.
Definition: PGFimage.h:87
UINT8 Clamp8(DataT v) const
Definition: PGFimage.h:557
PGFRect m_roi
region of interest
Definition: PGFimage.h:531
const PGFHeader * GetHeader() const
Definition: PGFimage.h:339
void SetROI(PGFRect rect)
void Read(int level=0, CallbackPtr cb=NULL, void *data=NULL) THROW_
Definition: PGFimage.cpp:383
ProgressMode m_progressMode
progress mode used in Read and Write; PM_Relative is default mode
Definition: PGFimage.h:538
BYTE Mode() const
Definition: PGFimage.h:454
bool m_downsample
chrominance channels are downsampled
Definition: PGFimage.h:524
void ConfigureDecoder(bool useOMP=true, bool skipUserData=false)
Definition: PGFimage.h:266
UINT32 GetEncodedLevelLength(int level) const
Definition: PGFimage.h:370
bool ROIisSupported() const
Definition: PGFimage.h:465
BYTE Version() const
Definition: PGFimage.h:476
UINT32 Height(int level=0) const
Definition: PGFimage.h:423
void ResetStreamPos() THROW_
Reset stream position to start of PGF pre-header.
Definition: PGFimage.cpp:644
void Open(CPGFStream *stream) THROW_
Definition: PGFimage.cpp:131
BYTE Levels() const
Definition: PGFimage.h:435
void Reconstruct(int level=0) THROW_
Definition: PGFimage.cpp:331
UINT32 m_width[MaxChannels]
width of each channel at current level
Definition: PGFimage.h:516
PGFPostHeader m_postHeader
PGF post-header.
Definition: PGFimage.h:520
DataT * GetChannel(int c=0)
Definition: PGFimage.h:321
void SetRefreshCallback(RefreshCB callback, void *arg)
Definition: PGFimage.h:307
UINT32 Write(int level, CallbackPtr cb=NULL, void *data=NULL) THROW_
RefreshCB m_cb
pointer to refresh callback procedure
Definition: PGFimage.h:535
void GetYUV(int pitch, DataT *buff, BYTE bpp, int channelMap[]=NULL, CallbackPtr cb=NULL, void *data=NULL) const THROW_
Definition: PGFimage.cpp:2477
const RGBQUAD * GetColorTable() const
Definition: PGFimage.h:334
BYTE BPP() const
Definition: PGFimage.h:460
UINT64 m_userDataPos
stream position of user data
Definition: PGFimage.h:521
bool m_skipUserData
skip user data (metadata) during open
Definition: PGFimage.h:528
UINT32 GetEncodedHeaderLength() const
Definition: PGFimage.cpp:612
void ComputeLevels()
Definition: PGFimage.cpp:803
void SetProgressMode(ProgressMode pm)
Definition: PGFimage.h:300
PGFPreHeader m_preHeader
PGF pre-header.
Definition: PGFimage.h:518
void Read(PGFRect &rect, int level=0, CallbackPtr cb=NULL, void *data=NULL) THROW_
double m_percent
progress [0..1]
Definition: PGFimage.h:537
UINT8 Clamp4(DataT v) const
Definition: PGFimage.h:551
void ImportYUV(int pitch, DataT *buff, BYTE bpp, int channelMap[]=NULL, CallbackPtr cb=NULL, void *data=NULL) THROW_
Definition: PGFimage.cpp:2588
CWaveletTransform * m_wtChannel[MaxChannels]
wavelet transformed color channels
Definition: PGFimage.h:511
virtual void Close()
Definition: PGFimage.cpp:122
bool m_streamReinitialized
stream has been reinitialized
Definition: PGFimage.h:530
BYTE Channels() const
Definition: PGFimage.h:447
CPGFImage()
Standard constructor: It is used to create a PGF instance for opening and reading.
Definition: PGFimage.cpp:55
void ImportBitmap(int pitch, UINT8 *buff, BYTE bpp, int channelMap[]=NULL, CallbackPtr cb=NULL, void *data=NULL) THROW_
Definition: PGFimage.cpp:742
UINT32 ReadEncodedData(int level, UINT8 *target, UINT32 targetLen) const THROW_
Definition: PGFimage.cpp:658
void GetBitmap(int pitch, UINT8 *buff, BYTE bpp, int channelMap[]=NULL, CallbackPtr cb=NULL, void *data=NULL) const THROW_
Definition: PGFimage.cpp:1719
Abstract stream base class.
Definition: PGFstream.h:39
PGF wavelet transform.
PGF header.
Definition: PGFtypes.h:123
UINT8 mode
image mode according to Adobe's image modes
Definition: PGFtypes.h:131
UINT32 height
image height in pixels
Definition: PGFtypes.h:126
UINT32 width
image width in pixels
Definition: PGFtypes.h:125
UINT8 nLevels
number of DWT levels
Definition: PGFtypes.h:127
UINT8 channels
number of channels
Definition: PGFtypes.h:130
UINT8 usedBitsPerChannel
number of used bits per channel in 16- and 32-bit per channel modes
Definition: PGFtypes.h:132
UINT8 quality
quantization parameter: 0=lossless, 4=standard, 6=poor quality
Definition: PGFtypes.h:128
UINT8 bpp
bits per pixel
Definition: PGFtypes.h:129
UINT8 version
PGF version.
Definition: PGFtypes.h:106
Optional PGF post-header.
Definition: PGFtypes.h:141
RGBQUAD clut[ColorTableLen]
color table for indexed color images
Definition: PGFtypes.h:142
PGF pre-header.
Definition: PGFtypes.h:114
Rectangle.
Definition: PGFtypes.h:194