xref: /aoo41x/main/svtools/source/inc/gifread.hxx (revision cdf0e10c)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir #ifndef _GIFREAD_HXX
29*cdf0e10cSrcweir #define _GIFREAD_HXX
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir #ifndef _GRAPH_HXX
32*cdf0e10cSrcweir #include <vcl/graph.hxx>
33*cdf0e10cSrcweir #endif
34*cdf0e10cSrcweir #ifndef _BMPACC_HXX
35*cdf0e10cSrcweir #include <vcl/bmpacc.hxx>
36*cdf0e10cSrcweir #endif
37*cdf0e10cSrcweir 
38*cdf0e10cSrcweir #ifdef _GIFPRIVATE
39*cdf0e10cSrcweir 
40*cdf0e10cSrcweir // ---------
41*cdf0e10cSrcweir // - Enums -
42*cdf0e10cSrcweir // ---------
43*cdf0e10cSrcweir 
44*cdf0e10cSrcweir enum GIFAction
45*cdf0e10cSrcweir {
46*cdf0e10cSrcweir 	GLOBAL_HEADER_READING,
47*cdf0e10cSrcweir 	MARKER_READING,
48*cdf0e10cSrcweir 	EXTENSION_READING,
49*cdf0e10cSrcweir 	LOCAL_HEADER_READING,
50*cdf0e10cSrcweir 	FIRST_BLOCK_READING,
51*cdf0e10cSrcweir 	NEXT_BLOCK_READING,
52*cdf0e10cSrcweir 	ABORT_READING,
53*cdf0e10cSrcweir 	END_READING
54*cdf0e10cSrcweir };
55*cdf0e10cSrcweir 
56*cdf0e10cSrcweir // ------------------------------------------------------------------------
57*cdf0e10cSrcweir 
58*cdf0e10cSrcweir enum ReadState
59*cdf0e10cSrcweir {
60*cdf0e10cSrcweir 	GIFREAD_OK,
61*cdf0e10cSrcweir 	GIFREAD_ERROR,
62*cdf0e10cSrcweir 	GIFREAD_NEED_MORE
63*cdf0e10cSrcweir };
64*cdf0e10cSrcweir 
65*cdf0e10cSrcweir // -------------
66*cdf0e10cSrcweir // - GIFReader -
67*cdf0e10cSrcweir // -------------
68*cdf0e10cSrcweir 
69*cdf0e10cSrcweir class GIFLZWDecompressor;
70*cdf0e10cSrcweir 
71*cdf0e10cSrcweir class SvStream;
72*cdf0e10cSrcweir 
73*cdf0e10cSrcweir class GIFReader : public GraphicReader
74*cdf0e10cSrcweir {
75*cdf0e10cSrcweir 	Graphic				aImGraphic;
76*cdf0e10cSrcweir 	Animation			aAnimation;
77*cdf0e10cSrcweir 	Bitmap				aBmp8;
78*cdf0e10cSrcweir 	Bitmap				aBmp1;
79*cdf0e10cSrcweir 	BitmapPalette		aGPalette;
80*cdf0e10cSrcweir 	BitmapPalette		aLPalette;
81*cdf0e10cSrcweir 	SvStream&			rIStm;
82*cdf0e10cSrcweir 	void*				pCallerData;
83*cdf0e10cSrcweir 	HPBYTE				pSrcBuf;
84*cdf0e10cSrcweir 	GIFLZWDecompressor*	pDecomp;
85*cdf0e10cSrcweir 	BitmapWriteAccess*	pAcc8;
86*cdf0e10cSrcweir 	BitmapWriteAccess*	pAcc1;
87*cdf0e10cSrcweir 	long				nYAcc;
88*cdf0e10cSrcweir 	long				nLastPos;
89*cdf0e10cSrcweir 	sal_uInt32			nLogWidth100;
90*cdf0e10cSrcweir 	sal_uInt32			nLogHeight100;
91*cdf0e10cSrcweir 	sal_uInt16				nTimer;
92*cdf0e10cSrcweir 	sal_uInt16				nGlobalWidth;			// maximale Bildbreite aus Header
93*cdf0e10cSrcweir 	sal_uInt16				nGlobalHeight;			// maximale Bildhoehe aus Header
94*cdf0e10cSrcweir 	sal_uInt16				nImageWidth;			// maximale Bildbreite aus Header
95*cdf0e10cSrcweir 	sal_uInt16				nImageHeight;			// maximale Bildhoehe aus Header
96*cdf0e10cSrcweir 	sal_uInt16				nImagePosX;
97*cdf0e10cSrcweir 	sal_uInt16				nImagePosY;
98*cdf0e10cSrcweir 	sal_uInt16				nImageX;				// maximale Bildbreite aus Header
99*cdf0e10cSrcweir 	sal_uInt16				nImageY;				// maximale Bildhoehe aus Header
100*cdf0e10cSrcweir 	sal_uInt16				nLastImageY;
101*cdf0e10cSrcweir 	sal_uInt16				nLastInterCount;
102*cdf0e10cSrcweir 	sal_uInt16				nLoops;
103*cdf0e10cSrcweir 	GIFAction			eActAction;
104*cdf0e10cSrcweir 	sal_Bool				bStatus;
105*cdf0e10cSrcweir 	sal_Bool				bGCTransparent;			// Ob das Bild Transparent ist, wenn ja:
106*cdf0e10cSrcweir 	sal_Bool				bInterlaced;
107*cdf0e10cSrcweir 	sal_Bool				bOverreadBlock;
108*cdf0e10cSrcweir 	sal_Bool				bImGraphicReady;
109*cdf0e10cSrcweir 	sal_Bool				bGlobalPalette;
110*cdf0e10cSrcweir 	sal_uInt8				nBackgroundColor;		// Hintergrundfarbe
111*cdf0e10cSrcweir 	sal_uInt8				nGCTransparentIndex;	// Pixel von diesem Index sind durchsichtig
112*cdf0e10cSrcweir 	sal_uInt8				nGCDisposalMethod;		// 'Disposal Method' (siehe GIF-Doku)
113*cdf0e10cSrcweir 	sal_uInt8				cTransIndex1;
114*cdf0e10cSrcweir 	sal_uInt8				cNonTransIndex1;
115*cdf0e10cSrcweir 
116*cdf0e10cSrcweir 	void				ReadPaletteEntries( BitmapPalette* pPal, sal_uLong nCount );
117*cdf0e10cSrcweir 	void				ClearImageExtensions();
118*cdf0e10cSrcweir 	sal_Bool				CreateBitmaps( long nWidth, long nHeight, BitmapPalette* pPal, sal_Bool bWatchForBackgroundColor );
119*cdf0e10cSrcweir 	sal_Bool				ReadGlobalHeader();
120*cdf0e10cSrcweir 	sal_Bool				ReadExtension();
121*cdf0e10cSrcweir 	sal_Bool				ReadLocalHeader();
122*cdf0e10cSrcweir 	sal_uLong				ReadNextBlock();
123*cdf0e10cSrcweir 	void				FillImages( HPBYTE pBytes, sal_uLong nCount );
124*cdf0e10cSrcweir 	void				CreateNewBitmaps();
125*cdf0e10cSrcweir 	sal_Bool				ProcessGIF();
126*cdf0e10cSrcweir 
127*cdf0e10cSrcweir public:
128*cdf0e10cSrcweir 
129*cdf0e10cSrcweir 	ReadState			ReadGIF( Graphic& rGraphic );
130*cdf0e10cSrcweir 	const Graphic&		GetIntermediateGraphic();
131*cdf0e10cSrcweir 
132*cdf0e10cSrcweir 						GIFReader( SvStream& rStm );
133*cdf0e10cSrcweir 	virtual				~GIFReader();
134*cdf0e10cSrcweir };
135*cdf0e10cSrcweir 
136*cdf0e10cSrcweir #endif // _GIFPRIVATE
137*cdf0e10cSrcweir 
138*cdf0e10cSrcweir // -------------
139*cdf0e10cSrcweir // - ImportGIF -
140*cdf0e10cSrcweir // -------------
141*cdf0e10cSrcweir 
142*cdf0e10cSrcweir  sal_Bool ImportGIF( SvStream& rStream, Graphic& rGraphic );
143*cdf0e10cSrcweir 
144*cdf0e10cSrcweir #endif // _GIFREAD_HXX
145