xref: /aoo41x/main/vcl/source/gdi/bmpacc2.cxx (revision 9f62ea84)
1*9f62ea84SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*9f62ea84SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*9f62ea84SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*9f62ea84SAndrew Rist  * distributed with this work for additional information
6*9f62ea84SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*9f62ea84SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*9f62ea84SAndrew Rist  * "License"); you may not use this file except in compliance
9*9f62ea84SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*9f62ea84SAndrew Rist  *
11*9f62ea84SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*9f62ea84SAndrew Rist  *
13*9f62ea84SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*9f62ea84SAndrew Rist  * software distributed under the License is distributed on an
15*9f62ea84SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*9f62ea84SAndrew Rist  * KIND, either express or implied.  See the License for the
17*9f62ea84SAndrew Rist  * specific language governing permissions and limitations
18*9f62ea84SAndrew Rist  * under the License.
19*9f62ea84SAndrew Rist  *
20*9f62ea84SAndrew Rist  *************************************************************/
21*9f62ea84SAndrew Rist 
22*9f62ea84SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_vcl.hxx"
26cdf0e10cSrcweir #include <vcl/salbtype.hxx>
27cdf0e10cSrcweir #include <vcl/bmpacc.hxx>
28cdf0e10cSrcweir 
29cdf0e10cSrcweir // ----------------
30cdf0e10cSrcweir // - BitmapAccess -
31cdf0e10cSrcweir // ----------------
32cdf0e10cSrcweir 
33cdf0e10cSrcweir IMPL_FORMAT_GETPIXEL_NOMASK( _1BIT_MSB_PAL )
34cdf0e10cSrcweir {
35cdf0e10cSrcweir 	return( pScanline[ nX >> 3 ] & ( 1 << ( 7 - ( nX & 7 ) ) ) ? 1 : 0 );
36cdf0e10cSrcweir }
37cdf0e10cSrcweir 
38cdf0e10cSrcweir // ------------------------------------------------------------------
39cdf0e10cSrcweir 
40cdf0e10cSrcweir IMPL_FORMAT_SETPIXEL_NOMASK( _1BIT_MSB_PAL )
41cdf0e10cSrcweir {
42cdf0e10cSrcweir 	sal_uInt8& rByte = pScanline[ nX >> 3 ];
43cdf0e10cSrcweir 
44cdf0e10cSrcweir 	( rBitmapColor.GetIndex() & 1 ) ? ( rByte |= 1 << ( 7 - ( nX & 7 ) ) ) :
45cdf0e10cSrcweir 									  ( rByte &= ~( 1 << ( 7 - ( nX & 7 ) ) ) );
46cdf0e10cSrcweir }
47cdf0e10cSrcweir 
48cdf0e10cSrcweir // ------------------------------------------------------------------
49cdf0e10cSrcweir 
50cdf0e10cSrcweir IMPL_FORMAT_GETPIXEL_NOMASK( _1BIT_LSB_PAL )
51cdf0e10cSrcweir {
52cdf0e10cSrcweir 	return( pScanline[ nX >> 3 ] & ( 1 << ( nX & 7 ) ) ? 1 : 0 );
53cdf0e10cSrcweir }
54cdf0e10cSrcweir 
55cdf0e10cSrcweir // ------------------------------------------------------------------
56cdf0e10cSrcweir 
57cdf0e10cSrcweir IMPL_FORMAT_SETPIXEL_NOMASK( _1BIT_LSB_PAL )
58cdf0e10cSrcweir {
59cdf0e10cSrcweir 	sal_uInt8& rByte = pScanline[ nX >> 3 ];
60cdf0e10cSrcweir 
61cdf0e10cSrcweir 	( rBitmapColor.GetIndex() & 1 ) ? ( rByte |= 1 << ( nX & 7 ) ) :
62cdf0e10cSrcweir 									  ( rByte &= ~( 1 << ( nX & 7 ) ) );
63cdf0e10cSrcweir }
64cdf0e10cSrcweir 
65cdf0e10cSrcweir // ------------------------------------------------------------------
66cdf0e10cSrcweir 
67cdf0e10cSrcweir IMPL_FORMAT_GETPIXEL_NOMASK( _4BIT_MSN_PAL )
68cdf0e10cSrcweir {
69cdf0e10cSrcweir 	return( ( pScanline[ nX >> 1 ] >> ( nX & 1 ? 0 : 4 ) ) & 0x0f );
70cdf0e10cSrcweir }
71cdf0e10cSrcweir 
72cdf0e10cSrcweir // ------------------------------------------------------------------
73cdf0e10cSrcweir 
74cdf0e10cSrcweir IMPL_FORMAT_SETPIXEL_NOMASK( _4BIT_MSN_PAL )
75cdf0e10cSrcweir {
76cdf0e10cSrcweir 	sal_uInt8& rByte = pScanline[ nX >> 1 ];
77cdf0e10cSrcweir 
78cdf0e10cSrcweir 	( nX & 1 ) ? ( rByte &= 0xf0, rByte |= ( rBitmapColor.GetIndex() & 0x0f ) ) :
79cdf0e10cSrcweir 				 ( rByte &= 0x0f, rByte |= ( rBitmapColor.GetIndex() << 4 ) );
80cdf0e10cSrcweir }
81cdf0e10cSrcweir 
82cdf0e10cSrcweir // ------------------------------------------------------------------
83cdf0e10cSrcweir 
84cdf0e10cSrcweir IMPL_FORMAT_GETPIXEL_NOMASK( _4BIT_LSN_PAL )
85cdf0e10cSrcweir {
86cdf0e10cSrcweir 	return( ( pScanline[ nX >> 1 ] >> ( nX & 1 ? 4 : 0 ) ) & 0x0f );
87cdf0e10cSrcweir }
88cdf0e10cSrcweir 
89cdf0e10cSrcweir // ------------------------------------------------------------------
90cdf0e10cSrcweir 
91cdf0e10cSrcweir IMPL_FORMAT_SETPIXEL_NOMASK( _4BIT_LSN_PAL )
92cdf0e10cSrcweir {
93cdf0e10cSrcweir 	sal_uInt8& rByte = pScanline[ nX >> 1 ];
94cdf0e10cSrcweir 
95cdf0e10cSrcweir 	( nX & 1 ) ? ( rByte &= 0x0f, rByte |= ( rBitmapColor.GetIndex() << 4 ) ) :
96cdf0e10cSrcweir 				 ( rByte &= 0xf0, rByte |= ( rBitmapColor.GetIndex() & 0x0f ) );
97cdf0e10cSrcweir }
98cdf0e10cSrcweir 
99cdf0e10cSrcweir // ------------------------------------------------------------------
100cdf0e10cSrcweir 
101cdf0e10cSrcweir IMPL_FORMAT_GETPIXEL_NOMASK( _8BIT_PAL )
102cdf0e10cSrcweir {
103cdf0e10cSrcweir 	return pScanline[ nX ];
104cdf0e10cSrcweir }
105cdf0e10cSrcweir 
106cdf0e10cSrcweir // ------------------------------------------------------------------
107cdf0e10cSrcweir 
108cdf0e10cSrcweir IMPL_FORMAT_SETPIXEL_NOMASK( _8BIT_PAL )
109cdf0e10cSrcweir {
110cdf0e10cSrcweir 	pScanline[ nX ] = rBitmapColor.GetIndex();
111cdf0e10cSrcweir }
112cdf0e10cSrcweir 
113cdf0e10cSrcweir // ------------------------------------------------------------------
114cdf0e10cSrcweir 
115cdf0e10cSrcweir IMPL_FORMAT_GETPIXEL( _8BIT_TC_MASK )
116cdf0e10cSrcweir {
117cdf0e10cSrcweir 	BitmapColor aColor;
118cdf0e10cSrcweir 	rMask.GetColorFor8Bit( aColor, pScanline + nX );
119cdf0e10cSrcweir 	return aColor;
120cdf0e10cSrcweir }
121cdf0e10cSrcweir 
122cdf0e10cSrcweir // ------------------------------------------------------------------
123cdf0e10cSrcweir 
124cdf0e10cSrcweir IMPL_FORMAT_SETPIXEL( _8BIT_TC_MASK )
125cdf0e10cSrcweir {
126cdf0e10cSrcweir 	rMask.SetColorFor8Bit( rBitmapColor, pScanline + nX );
127cdf0e10cSrcweir }
128cdf0e10cSrcweir 
129cdf0e10cSrcweir // ------------------------------------------------------------------
130cdf0e10cSrcweir 
131cdf0e10cSrcweir IMPL_FORMAT_GETPIXEL( _16BIT_TC_MSB_MASK )
132cdf0e10cSrcweir {
133cdf0e10cSrcweir 	BitmapColor aColor;
134cdf0e10cSrcweir 	rMask.GetColorFor16BitMSB( aColor, pScanline + ( nX << 1UL ) );
135cdf0e10cSrcweir 	return aColor;
136cdf0e10cSrcweir }
137cdf0e10cSrcweir 
138cdf0e10cSrcweir // ------------------------------------------------------------------
139cdf0e10cSrcweir 
140cdf0e10cSrcweir IMPL_FORMAT_SETPIXEL( _16BIT_TC_MSB_MASK )
141cdf0e10cSrcweir {
142cdf0e10cSrcweir 	rMask.SetColorFor16BitMSB( rBitmapColor, pScanline + ( nX << 1UL ) );
143cdf0e10cSrcweir }
144cdf0e10cSrcweir 
145cdf0e10cSrcweir // ------------------------------------------------------------------
146cdf0e10cSrcweir 
147cdf0e10cSrcweir IMPL_FORMAT_GETPIXEL( _16BIT_TC_LSB_MASK )
148cdf0e10cSrcweir {
149cdf0e10cSrcweir     BitmapColor aColor;
150cdf0e10cSrcweir     rMask.GetColorFor16BitLSB( aColor, pScanline + ( nX << 1UL ) );
151cdf0e10cSrcweir     return aColor;
152cdf0e10cSrcweir }
153cdf0e10cSrcweir 
154cdf0e10cSrcweir // ------------------------------------------------------------------
155cdf0e10cSrcweir 
156cdf0e10cSrcweir IMPL_FORMAT_SETPIXEL( _16BIT_TC_LSB_MASK )
157cdf0e10cSrcweir {
158cdf0e10cSrcweir     rMask.SetColorFor16BitLSB( rBitmapColor, pScanline + ( nX << 1UL ) );
159cdf0e10cSrcweir }
160cdf0e10cSrcweir 
161cdf0e10cSrcweir // ------------------------------------------------------------------
162cdf0e10cSrcweir 
163cdf0e10cSrcweir IMPL_FORMAT_GETPIXEL_NOMASK( _24BIT_TC_BGR )
164cdf0e10cSrcweir {
165cdf0e10cSrcweir 	BitmapColor aBitmapColor;
166cdf0e10cSrcweir 
167cdf0e10cSrcweir 	aBitmapColor.SetBlue( *( pScanline = pScanline + nX * 3 )++ );
168cdf0e10cSrcweir 	aBitmapColor.SetGreen( *pScanline++ );
169cdf0e10cSrcweir 	aBitmapColor.SetRed( *pScanline );
170cdf0e10cSrcweir 
171cdf0e10cSrcweir 	return aBitmapColor;
172cdf0e10cSrcweir }
173cdf0e10cSrcweir 
174cdf0e10cSrcweir // ------------------------------------------------------------------
175cdf0e10cSrcweir 
176cdf0e10cSrcweir IMPL_FORMAT_SETPIXEL_NOMASK( _24BIT_TC_BGR )
177cdf0e10cSrcweir {
178cdf0e10cSrcweir 	*( pScanline = pScanline + nX * 3 )++ = rBitmapColor.GetBlue();
179cdf0e10cSrcweir 	*pScanline++ = rBitmapColor.GetGreen();
180cdf0e10cSrcweir 	*pScanline = rBitmapColor.GetRed();
181cdf0e10cSrcweir }
182cdf0e10cSrcweir 
183cdf0e10cSrcweir // ------------------------------------------------------------------
184cdf0e10cSrcweir 
185cdf0e10cSrcweir IMPL_FORMAT_GETPIXEL_NOMASK( _24BIT_TC_RGB )
186cdf0e10cSrcweir {
187cdf0e10cSrcweir 	BitmapColor aBitmapColor;
188cdf0e10cSrcweir 
189cdf0e10cSrcweir 	aBitmapColor.SetRed( *( pScanline = pScanline + nX * 3 )++ );
190cdf0e10cSrcweir 	aBitmapColor.SetGreen( *pScanline++ );
191cdf0e10cSrcweir 	aBitmapColor.SetBlue( *pScanline );
192cdf0e10cSrcweir 
193cdf0e10cSrcweir 	return aBitmapColor;
194cdf0e10cSrcweir }
195cdf0e10cSrcweir 
196cdf0e10cSrcweir // ------------------------------------------------------------------
197cdf0e10cSrcweir 
198cdf0e10cSrcweir IMPL_FORMAT_SETPIXEL_NOMASK( _24BIT_TC_RGB )
199cdf0e10cSrcweir {
200cdf0e10cSrcweir 	*( pScanline = pScanline + nX * 3 )++ = rBitmapColor.GetRed();
201cdf0e10cSrcweir 	*pScanline++ = rBitmapColor.GetGreen();
202cdf0e10cSrcweir 	*pScanline = rBitmapColor.GetBlue();
203cdf0e10cSrcweir }
204cdf0e10cSrcweir 
205cdf0e10cSrcweir // ------------------------------------------------------------------
206cdf0e10cSrcweir 
207cdf0e10cSrcweir IMPL_FORMAT_GETPIXEL( _24BIT_TC_MASK )
208cdf0e10cSrcweir {
209cdf0e10cSrcweir 	BitmapColor aColor;
210cdf0e10cSrcweir 	rMask.GetColorFor24Bit( aColor, pScanline + nX * 3L );
211cdf0e10cSrcweir 	return aColor;
212cdf0e10cSrcweir }
213cdf0e10cSrcweir 
214cdf0e10cSrcweir // ------------------------------------------------------------------
215cdf0e10cSrcweir 
216cdf0e10cSrcweir IMPL_FORMAT_SETPIXEL( _24BIT_TC_MASK )
217cdf0e10cSrcweir {
218cdf0e10cSrcweir 	rMask.SetColorFor24Bit( rBitmapColor, pScanline + nX * 3L );
219cdf0e10cSrcweir }
220cdf0e10cSrcweir 
221cdf0e10cSrcweir // ------------------------------------------------------------------
222cdf0e10cSrcweir 
223cdf0e10cSrcweir IMPL_FORMAT_GETPIXEL_NOMASK( _32BIT_TC_ABGR )
224cdf0e10cSrcweir {
225cdf0e10cSrcweir 	BitmapColor aBitmapColor;
226cdf0e10cSrcweir 
227cdf0e10cSrcweir 	aBitmapColor.SetBlue( *( pScanline = pScanline + ( nX << 2 ) + 1 )++ );
228cdf0e10cSrcweir 	aBitmapColor.SetGreen( *pScanline++ );
229cdf0e10cSrcweir 	aBitmapColor.SetRed( *pScanline );
230cdf0e10cSrcweir 
231cdf0e10cSrcweir 	return aBitmapColor;
232cdf0e10cSrcweir }
233cdf0e10cSrcweir 
234cdf0e10cSrcweir // ------------------------------------------------------------------
235cdf0e10cSrcweir 
236cdf0e10cSrcweir IMPL_FORMAT_SETPIXEL_NOMASK( _32BIT_TC_ABGR )
237cdf0e10cSrcweir {
238cdf0e10cSrcweir 	*( pScanline = pScanline + ( nX << 2 ) )++ = 0;
239cdf0e10cSrcweir 	*pScanline++ = rBitmapColor.GetBlue();
240cdf0e10cSrcweir 	*pScanline++ = rBitmapColor.GetGreen();
241cdf0e10cSrcweir 	*pScanline = rBitmapColor.GetRed();
242cdf0e10cSrcweir }
243cdf0e10cSrcweir 
244cdf0e10cSrcweir // ------------------------------------------------------------------
245cdf0e10cSrcweir 
246cdf0e10cSrcweir IMPL_FORMAT_GETPIXEL_NOMASK( _32BIT_TC_ARGB )
247cdf0e10cSrcweir {
248cdf0e10cSrcweir 	BitmapColor aBitmapColor;
249cdf0e10cSrcweir 
250cdf0e10cSrcweir 	aBitmapColor.SetRed( *( pScanline = pScanline + ( nX << 2 ) + 1 )++ );
251cdf0e10cSrcweir 	aBitmapColor.SetGreen( *pScanline++ );
252cdf0e10cSrcweir 	aBitmapColor.SetBlue( *pScanline );
253cdf0e10cSrcweir 
254cdf0e10cSrcweir 	return aBitmapColor;
255cdf0e10cSrcweir }
256cdf0e10cSrcweir 
257cdf0e10cSrcweir // ------------------------------------------------------------------
258cdf0e10cSrcweir 
259cdf0e10cSrcweir IMPL_FORMAT_SETPIXEL_NOMASK( _32BIT_TC_ARGB )
260cdf0e10cSrcweir {
261cdf0e10cSrcweir 	*( pScanline = pScanline + ( nX << 2 ) )++ = 0;
262cdf0e10cSrcweir 	*pScanline++ = rBitmapColor.GetRed();
263cdf0e10cSrcweir 	*pScanline++ = rBitmapColor.GetGreen();
264cdf0e10cSrcweir 	*pScanline = rBitmapColor.GetBlue();
265cdf0e10cSrcweir }
266cdf0e10cSrcweir 
267cdf0e10cSrcweir // ------------------------------------------------------------------
268cdf0e10cSrcweir 
269cdf0e10cSrcweir IMPL_FORMAT_GETPIXEL_NOMASK( _32BIT_TC_BGRA )
270cdf0e10cSrcweir {
271cdf0e10cSrcweir 	BitmapColor aBitmapColor;
272cdf0e10cSrcweir 
273cdf0e10cSrcweir 	aBitmapColor.SetBlue( *( pScanline = pScanline + ( nX << 2 ) )++ );
274cdf0e10cSrcweir 	aBitmapColor.SetGreen( *pScanline++ );
275cdf0e10cSrcweir 	aBitmapColor.SetRed( *pScanline );
276cdf0e10cSrcweir 
277cdf0e10cSrcweir 	return aBitmapColor;
278cdf0e10cSrcweir }
279cdf0e10cSrcweir 
280cdf0e10cSrcweir // ------------------------------------------------------------------
281cdf0e10cSrcweir 
282cdf0e10cSrcweir IMPL_FORMAT_SETPIXEL_NOMASK( _32BIT_TC_BGRA )
283cdf0e10cSrcweir {
284cdf0e10cSrcweir 	*( pScanline = pScanline + ( nX << 2 ) )++ = rBitmapColor.GetBlue();
285cdf0e10cSrcweir 	*pScanline++ = rBitmapColor.GetGreen();
286cdf0e10cSrcweir 	*pScanline++ = rBitmapColor.GetRed();
287cdf0e10cSrcweir 	*pScanline = 0;
288cdf0e10cSrcweir }
289cdf0e10cSrcweir 
290cdf0e10cSrcweir // ------------------------------------------------------------------
291cdf0e10cSrcweir 
292cdf0e10cSrcweir IMPL_FORMAT_GETPIXEL_NOMASK( _32BIT_TC_RGBA )
293cdf0e10cSrcweir {
294cdf0e10cSrcweir 	BitmapColor aBitmapColor;
295cdf0e10cSrcweir 
296cdf0e10cSrcweir 	aBitmapColor.SetRed( *( pScanline = pScanline + ( nX << 2 ) )++ );
297cdf0e10cSrcweir 	aBitmapColor.SetGreen( *pScanline++ );
298cdf0e10cSrcweir 	aBitmapColor.SetBlue( *pScanline );
299cdf0e10cSrcweir 
300cdf0e10cSrcweir 	return aBitmapColor;
301cdf0e10cSrcweir }
302cdf0e10cSrcweir 
303cdf0e10cSrcweir // ------------------------------------------------------------------
304cdf0e10cSrcweir 
305cdf0e10cSrcweir IMPL_FORMAT_SETPIXEL_NOMASK( _32BIT_TC_RGBA )
306cdf0e10cSrcweir {
307cdf0e10cSrcweir 	*( pScanline = pScanline + ( nX << 2 ) )++ = rBitmapColor.GetRed();
308cdf0e10cSrcweir 	*pScanline++ = rBitmapColor.GetGreen();
309cdf0e10cSrcweir 	*pScanline++ = rBitmapColor.GetBlue();
310cdf0e10cSrcweir 	*pScanline = 0;
311cdf0e10cSrcweir }
312cdf0e10cSrcweir 
313cdf0e10cSrcweir // ------------------------------------------------------------------
314cdf0e10cSrcweir 
315cdf0e10cSrcweir IMPL_FORMAT_GETPIXEL( _32BIT_TC_MASK )
316cdf0e10cSrcweir {
317cdf0e10cSrcweir 	BitmapColor aColor;
318cdf0e10cSrcweir 	rMask.GetColorFor32Bit( aColor, pScanline + ( nX << 2UL ) );
319cdf0e10cSrcweir 	return aColor;
320cdf0e10cSrcweir }
321cdf0e10cSrcweir 
322cdf0e10cSrcweir // ------------------------------------------------------------------
323cdf0e10cSrcweir 
324cdf0e10cSrcweir IMPL_FORMAT_SETPIXEL( _32BIT_TC_MASK )
325cdf0e10cSrcweir {
326cdf0e10cSrcweir 	rMask.SetColorFor32Bit( rBitmapColor, pScanline + ( nX << 2UL ) );
327cdf0e10cSrcweir }
328