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 10cdf0e10cSrcweir * 11*9f62ea84SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 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. 19cdf0e10cSrcweir * 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