xref: /AOO41X/main/svx/inc/svx/svimbase.hxx (revision 3334a7e6acdae9820fa1a6f556bb10129a8de6b2)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _SVIMBASE_HXX
25 #define _SVIMBASE_HXX
26 
27 #include <vcl/bitmap.hxx>
28 #include <vcl/salbtype.hxx>
29 
30 
31 // -----------
32 // - Defines -
33 // -----------
34 
35 #define _SVHUGE
36 
37 // ----------------
38 // - SimDepthType -
39 // ----------------
40 
41 enum SimDepthType
42 {
43     SIM_DEPTH_1,
44     SIM_DEPTH_4,
45     SIM_DEPTH_8,
46     SIM_DEPTH_24
47 };
48 
49 // ------------
50 // - SimColor -
51 // ------------
52 
53 struct SimColor
54 {
55     sal_uInt8 cBlue;
56     sal_uInt8 cGreen;
57     sal_uInt8 cRed;
58 };
59 
60 // ------------------------------------------------------------------------
61 
operator ==(const SimColor & rCol1,const SimColor & rCol2)62 inline sal_Bool operator==( const SimColor& rCol1, const SimColor& rCol2 )
63 {
64     return ( ( rCol1.cRed == rCol2.cRed ) &&
65              ( rCol1.cGreen == rCol2.cGreen ) &&
66              ( rCol1.cBlue == rCol2.cBlue ) );
67 }
68 
69 // --------------
70 // - SimPalette -
71 // --------------
72 
73 struct SimPalette
74 {
75     sal_uIntPtr     nColors;
76     SimColor    aColorArray[ 256 ];
77 };
78 
79 // ---------------
80 // - SvImageBase -
81 // ---------------
82 
83 class SfxViewFrame;
84 class SfxProgress;
85 
86 class SvImageBase
87 {
88 private:
89 
90     Bitmap              aOutBitmap;
91     HPBYTE              pArray1;
92     HPBYTE              pArray2;
93     HPBYTE              pArray3;
94     HPBYTE              pArray4;
95     HPBYTE              pOrgArray;
96     HPBYTE              pDestArray;
97     SimPalette*         pPal1;
98     SimPalette*         pPal2;
99     SimPalette*         pPal3;
100     SimPalette*         pPal4;
101     sal_uIntPtr             nWidth1;
102     sal_uIntPtr             nWidth2;
103     sal_uIntPtr             nWidth3;
104     sal_uIntPtr             nWidth4;
105     sal_uIntPtr             nHeight1;
106     sal_uIntPtr             nHeight2;
107     sal_uIntPtr             nHeight3;
108     sal_uIntPtr             nHeight4;
109     sal_uIntPtr             nAlignedWidth1;
110     sal_uIntPtr             nAlignedWidth2;
111     sal_uIntPtr             nAlignedWidth3;
112     sal_uIntPtr             nAlignedWidth4;
113     sal_uIntPtr             nWhichOrg;
114     SimDepthType        eOrgDepth;
115     SimDepthType        eUndoDepth;
116     SimDepthType        eRedoDepth;
117     sal_Bool                bIsUndo;
118     sal_Bool                bIsRedo;
119     sal_Bool                bCreateUndo;
120     sal_Bool                bValid;
121     sal_Bool                bDitherAll;
122 
123     HPBYTE              BitmapToArray24( const Bitmap& rBitmap, sal_uIntPtr* pWidth,
124                                          sal_uIntPtr* pHeight, sal_uIntPtr* pAlignedWidth,
125                                          SfxViewFrame *pFrame = NULL );
126     sal_Bool                Array24ToBitmap( HPBYTE pArray, Bitmap &rBitmap,
127                                          const sal_uIntPtr nWidth, const sal_uIntPtr nHeight,
128                                          const sal_uIntPtr nColorCount = 256,
129                                          sal_uIntPtr nLast = 0, SfxProgress* pProgress = NULL );
130 
131     Bitmap              CreateSaveBitmap( const SimDepthType eDepth, SfxViewFrame *pFrame = NULL );
132 
133     HPBYTE              CreateArray24( sal_uIntPtr nWidth, sal_uIntPtr nHeight );
134     void                DeleteArray( HPBYTE pArray );
135 
136                         SvImageBase(const SvImageBase& rSvImageBase);
137     const SvImageBase&  operator=(const SvImageBase& rSvImageBase);
138 
139 public:
140 
141                         SvImageBase();
142                         SvImageBase( const Bitmap& rBitmap,
143                                      const sal_uIntPtr nColorCount = 256,
144                                      sal_uIntPtr nLast = 0, SfxProgress* pProgress = NULL );
145                         ~SvImageBase();
146 
IsValid()147     sal_Bool                IsValid() { return bValid; }
148 
GetOrgWidth() const149     sal_uIntPtr             GetOrgWidth() const { return nWhichOrg == 1 ? nWidth1 : nWidth2; }
GetDestWidth() const150     sal_uIntPtr             GetDestWidth() const { return nWhichOrg == 1 ? nWidth2 : nWidth1; }
151 
GetOrgHeight() const152     sal_uIntPtr             GetOrgHeight() const { return nWhichOrg == 1 ? nHeight1 : nHeight2; }
GetDestHeight() const153     sal_uIntPtr             GetDestHeight() const { return nWhichOrg == 1 ? nHeight2 : nHeight1; }
154 
GetOrgAlignedWidth() const155     sal_uIntPtr             GetOrgAlignedWidth() const { return nWhichOrg == 1 ? nAlignedWidth1 : nAlignedWidth2; }
GetDestAlignedWidth() const156     sal_uIntPtr             GetDestAlignedWidth() const { return nWhichOrg == 1 ? nAlignedWidth2 : nAlignedWidth1; }
157 
GetOrgAlignedSize() const158     sal_uIntPtr             GetOrgAlignedSize() const { return GetOrgAlignedWidth() * GetOrgHeight(); }
GetDestAlignedSize() const159     sal_uIntPtr             GetDestAlignedSize() const { return GetDestAlignedWidth() * GetDestHeight(); }
160 
161     // Farbtiefe des Ausgangsbildes ermitteln und setzen
GetDepth() const162     SimDepthType        GetDepth() const { return eOrgDepth; }
SetDepth(const SimDepthType eDepth)163     void                SetDepth( const SimDepthType eDepth ) { eOrgDepth = eDepth; }
164 
165     // Farbtiefen nach Undo und Redo ermitteln und setzen
GetUndoDepth() const166     SimDepthType        GetUndoDepth() const { return eUndoDepth; }
SetUndoDepth(const SimDepthType eDepth)167     void                SetUndoDepth(const SimDepthType eDepth) { eUndoDepth = eDepth; }
168 
GetRedoDepth() const169     SimDepthType        GetRedoDepth() const { return eRedoDepth; }
SetRedoDepth(const SimDepthType eDepth)170     void                SetRedoDepth(const SimDepthType eDepth) { eRedoDepth = eDepth; }
171 
172     // Vor- und Ruecklauf der Bildverarbeitung
173     sal_Bool                BeginProcessing( sal_Bool bUndo = sal_True );
174     void                EndProcessing();
175 
176     sal_Bool                BeginProcessingExt(sal_uIntPtr nWidth, sal_uIntPtr nHeight, sal_Bool bUndo = sal_True);
EndProcessingExt()177     void                EndProcessingExt() { EndProcessing(); }
178 
179     // Zeiger auf Arrays zur Verfuegung stellen
GetOrgPointer()180     HPBYTE              GetOrgPointer() { return pOrgArray; }
GetDestPointer()181     HPBYTE              GetDestPointer() { return pDestArray; }
182 
183     // DIB-Erzeugung fuer Anzeige
184     sal_Bool                CreateOutBitmap( const sal_uIntPtr nColorCount = 256, sal_uIntPtr nLast = 0,
185                                          SfxProgress* pProgress = NULL );
186 
187     // Undo-Verwaltung
188     sal_Bool                DoUndo( SfxProgress* pProgress = NULL );
189     sal_Bool                DoRedo( SfxProgress* pProgress = NULL );
190 
191     // DIB-Rueckgabe fuer Anzeige
192     const Bitmap&       GetOutBitmap() const;
193 
194     // DIB-Rueckgabe fuer Speicherung
195     Bitmap              GetSaveBitmap();
196 
197     // Palette besorgen
GetOrgPalette() const198     SimPalette*         GetOrgPalette() const { return nWhichOrg == 1 ? pPal1 : pPal2; }
GetDestPalette() const199     SimPalette*         GetDestPalette() const { return nWhichOrg == 1 ? pPal2 : pPal1; }
200 };
201 
202 // ----------------
203 // - DitherBitmap -
204 // ----------------
205 
206 sal_Bool DitherBitmap( Bitmap& rBitmap, sal_Bool bDitherAlways = sal_False );
207 
208 #endif // _SVIMBASE_HXX
209