diff options
Diffstat (limited to 'goodies/source/filter.vcl/icgm/bitmap.cxx')
-rw-r--r-- | goodies/source/filter.vcl/icgm/bitmap.cxx | 413 |
1 files changed, 0 insertions, 413 deletions
diff --git a/goodies/source/filter.vcl/icgm/bitmap.cxx b/goodies/source/filter.vcl/icgm/bitmap.cxx deleted file mode 100644 index ac2e0929a0ab..000000000000 --- a/goodies/source/filter.vcl/icgm/bitmap.cxx +++ /dev/null @@ -1,413 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: bitmap.cxx,v $ - * $Revision: 1.6 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_goodies.hxx" - -#include "main.hxx" - -// --------------------------------------------------------------- - -CGMBitmap::CGMBitmap( CGM& rCGM ) : - mpCGM ( &rCGM ), - pCGMBitmapDescriptor ( new CGMBitmapDescriptor ) -{ - ImplGetBitmap( *pCGMBitmapDescriptor ); -}; - -// --------------------------------------------------------------- - -CGMBitmap::~CGMBitmap() -{ - delete pCGMBitmapDescriptor; -} - -// --------------------------------------------------------------- - -void CGMBitmap::ImplGetBitmap( CGMBitmapDescriptor& rDesc ) -{ - rDesc.mbStatus = sal_True; - long nx, ny, nxC, nxCount, nyCount; - - if ( ImplGetDimensions( rDesc ) && rDesc.mpBuf ) - { - if ( ( rDesc.mpBitmap = new Bitmap( Size( rDesc.mnX, rDesc.mnY ), (sal_uInt16)rDesc.mnDstBitsPerPixel ) ) != NULL ) - { - if ( ( rDesc.mpAcc = rDesc.mpBitmap->AcquireWriteAccess() ) != NULL ) - { - - // the picture may either be read from left to right or right to left, from top to bottom ... - - nxCount = rDesc.mnX + 1; // +1 because we are using prefix decreasing - nyCount = rDesc.mnY + 1; - - switch ( rDesc.mnDstBitsPerPixel ) - { - case 1 : - { - if ( rDesc.mnLocalColorPrecision == 1 ) - ImplSetCurrentPalette( rDesc ); - else - { - rDesc.mpAcc->SetPaletteEntryCount( 2 ); - rDesc.mpAcc->SetPaletteColor( 0, BMCOL( mpCGM->pElement->nBackGroundColor ) ); - rDesc.mpAcc->SetPaletteColor( 1, - ( mpCGM->pElement->nAspectSourceFlags & ASF_FILLINTERIORSTYLE ) - ? BMCOL( mpCGM->pElement->pFillBundle->GetColor() ) - : BMCOL( mpCGM->pElement->aFillBundle.GetColor() ) ) ; - } - for ( ny = 0; --nyCount ; ny++, rDesc.mpBuf += rDesc.mnScanSize ) - { - nxC = nxCount; - for ( nx = 0; --nxC; nx++ ) - { // this is not fast, but a one bit/pixel format is rarely used - rDesc.mpAcc->SetPixel( ny, nx, (sal_Int8)( (*( rDesc.mpBuf + ( nx >> 3 ) ) >> ( ( nx & 7 ) ^ 7 ) ) ) & 1 ); - } - } - } - break; - - case 2 : - { - ImplSetCurrentPalette( rDesc ); - for ( ny = 0; --nyCount; ny++, rDesc.mpBuf += rDesc.mnScanSize ) - { - nxC = nxCount; - for ( nx = 0; --nxC; nx++ ) - { // this is not fast, but a two bits/pixel format is rarely used - rDesc.mpAcc->SetPixel( ny, nx, (sal_Int8)( (*( rDesc.mpBuf + ( nx >> 2 ) ) >> ( ( ( nx & 3 ) ^ 3 ) << 1 ) ) ) & 3 ); - } - } - } - break; - - case 4 : - { - ImplSetCurrentPalette( rDesc ); - for ( ny = 0; --nyCount; ny++, rDesc.mpBuf += rDesc.mnScanSize ) - { - nxC = nxCount; - sal_Int8 nDat; - sal_uInt8* pTemp = rDesc.mpBuf; - for ( nx = 0; --nxC; nx++ ) - { - nDat = *pTemp++; - rDesc.mpAcc->SetPixel( ny, nx, (sal_Int8)( nDat >> 4 ) ); - if ( --nxC ) - { - nx ++; - rDesc.mpAcc->SetPixel( ny, nx, (sal_Int8)( nDat & 15 ) ); - } - else - break; - } - } - } - break; - - case 8 : - { - ImplSetCurrentPalette( rDesc ); - for ( ny = 0; --nyCount; ny++, rDesc.mpBuf += rDesc.mnScanSize ) - { - sal_uInt8* pTemp = rDesc.mpBuf; - nxC = nxCount; - for ( nx = 0; --nxC; nx++ ) - { - rDesc.mpAcc->SetPixel( ny, nx, (sal_Int8)( *pTemp++ ) ); - } - } - } - break; - - case 24 : - { - { - BitmapColor aBitmapColor; - for ( ny = 0; --nyCount; ny++, rDesc.mpBuf += rDesc.mnScanSize ) - { - sal_uInt8* pTemp = rDesc.mpBuf; - nxC = nxCount; - for ( nx = 0; --nxC; nx++ ) - { - aBitmapColor.SetRed( (sal_Int8)*pTemp++ ); - aBitmapColor.SetGreen( (sal_Int8)*pTemp++ ); - aBitmapColor.SetBlue( (sal_Int8)*pTemp++ ); - rDesc.mpAcc->SetPixel( ny, nx, aBitmapColor ); - } - } - } - } - break; - }; - double nX = rDesc.mnR.X - rDesc.mnQ.X; - double nY = rDesc.mnR.Y - rDesc.mnQ.Y; - - rDesc.mndy = sqrt( nX * nX + nY * nY ); - - nX = rDesc.mnR.X - rDesc.mnP.X; - nY = rDesc.mnR.Y - rDesc.mnP.Y; - - rDesc.mndx = sqrt( nX * nX + nY * nY ); - - nX = rDesc.mnR.X - rDesc.mnP.X; - nY = rDesc.mnR.Y - rDesc.mnP.Y; - - rDesc.mnOrientation = acos( nX / sqrt( nX * nX + nY * nY ) ) * 57.29577951308; - if ( nY > 0 ) - rDesc.mnOrientation = 360 - rDesc.mnOrientation; - - nX = rDesc.mnQ.X - rDesc.mnR.X; - nY = rDesc.mnQ.Y - rDesc.mnR.Y; - - double fAngle = 0.01745329251994 * ( 360 - rDesc.mnOrientation ); - double fSin = sin(fAngle); - double fCos = cos(fAngle); - nX = fCos * nX + fSin * nY; - nY = -( fSin * nX - fCos * nY ); - - fAngle = acos( nX / sqrt( nX * nX + nY * nY ) ) * 57.29577951308; - if ( nY > 0 ) - fAngle = 360 - fAngle; - - if ( fAngle > 180 ) // wird das bild nach oben oder unten aufgebaut ? - { - rDesc.mnOrigin = rDesc.mnP; - } - else - { - rDesc.mbVMirror = sal_True; - rDesc.mnOrigin = rDesc.mnP; - rDesc.mnOrigin.X += rDesc.mnQ.X - rDesc.mnR.X; - rDesc.mnOrigin.Y += rDesc.mnQ.Y - rDesc.mnR.Y; - } - } - else - rDesc.mbStatus = sal_False; - } - else - rDesc.mbStatus = sal_False; - } - else - rDesc.mbStatus = sal_False; - - if ( rDesc.mpAcc ) - { - rDesc.mpBitmap->ReleaseAccess( rDesc.mpAcc ); - rDesc.mpAcc = NULL; - } - if ( rDesc.mbStatus == sal_False ) - { - if ( rDesc.mpBitmap ) - { - delete rDesc.mpBitmap; - rDesc.mpBitmap = NULL; - } - } -} - -// --------------------------------------------------------------- - -void CGMBitmap::ImplSetCurrentPalette( CGMBitmapDescriptor& rDesc ) -{ - sal_uInt16 nColors = sal::static_int_cast< sal_uInt16 >( - 1 << rDesc.mnDstBitsPerPixel); - rDesc.mpAcc->SetPaletteEntryCount( nColors ); - for ( sal_uInt16 i = 0; i < nColors; i++ ) - { - rDesc.mpAcc->SetPaletteColor( i, BMCOL( mpCGM->pElement->aLatestColorTable[ i ] ) ); - } -} - -// --------------------------------------------------------------- - -sal_Bool CGMBitmap::ImplGetDimensions( CGMBitmapDescriptor& rDesc ) -{ - mpCGM->ImplGetPoint( rDesc.mnP ); // parallelogram p < - > r - mpCGM->ImplGetPoint( rDesc.mnQ ); // | - mpCGM->ImplGetPoint( rDesc.mnR ); // q - sal_uInt32 nPrecision = mpCGM->pElement->nIntegerPrecision; - rDesc.mnX = mpCGM->ImplGetUI( nPrecision ); - rDesc.mnY = mpCGM->ImplGetUI( nPrecision ); - rDesc.mnLocalColorPrecision = mpCGM->ImplGetI( nPrecision ); - rDesc.mnScanSize = 0; - switch( rDesc.mnLocalColorPrecision ) - { - case 0x80000001 : // monochrome ( bit = 0->backgroundcolor ) - case 0 : // bit = 1->fillcolor - rDesc.mnDstBitsPerPixel = 1; - break; - case 1 : // 2 color indexed ( monochrome ) - case -1 : - rDesc.mnDstBitsPerPixel = 1; - break; - case 2 : // 4 color indexed - case -2 : - rDesc.mnDstBitsPerPixel = 2; - break; - case 4 : // 16 color indexed - case -4 : - rDesc.mnDstBitsPerPixel = 4; - break; - case 8 : // 256 color indexed - case -8 : - rDesc.mnDstBitsPerPixel = 8; - rDesc.mnScanSize = rDesc.mnX; - break; - case 16 : // NS - case -16 : - rDesc.mbStatus = sal_False; - break; - case 24 : // 24 bit directColor ( 8 bits each component ) - case -24 : - rDesc.mnDstBitsPerPixel = 24; - break; - case 32 : // NS - case -32 : - rDesc.mbStatus = sal_False; - break; - - } - // mnCompressionMode == 0 : CCOMP_RUNLENGTH - // == 1 : CCOMP_PACKED ( no compression. each row starts on a 4 byte boundary ) - if ( ( rDesc.mnCompressionMode = mpCGM->ImplGetUI16() ) != 1 ) - rDesc.mbStatus = sal_False; - - if ( ( rDesc.mnX || rDesc.mnY ) == 0 ) - rDesc.mbStatus = sal_False; - - sal_uInt32 nHeaderSize = 2 + 3 * nPrecision + 3 * mpCGM->ImplGetPointSize(); - rDesc.mnScanSize = ( ( rDesc.mnX * rDesc.mnDstBitsPerPixel + 7 ) >> 3 ); - - sal_uInt32 nScanSize; - nScanSize = rDesc.mnScanSize; - if ( ( nScanSize * rDesc.mnY + nHeaderSize ) != mpCGM->mnElementSize ) // try a scansize without dw alignment - { - nScanSize = ( rDesc.mnScanSize + 1 ) & ~1; - if ( ( nScanSize * rDesc.mnY + nHeaderSize ) != mpCGM->mnElementSize ) // then we'll try word alignment - { - nScanSize = ( rDesc.mnScanSize + 3 ) & ~3; - if ( ( nScanSize * rDesc.mnY + nHeaderSize ) != mpCGM->mnElementSize ) // and last we'll try dword alignment - { - nScanSize = ( rDesc.mnScanSize + 1 ) & ~1; // and LAST BUT NOT LEAST we'll try word alignment without aligning the last line - if ( ( nScanSize * ( rDesc.mnY - 1 ) + rDesc.mnScanSize + nHeaderSize ) != mpCGM->mnElementSize ) - { - nScanSize = ( rDesc.mnScanSize + 3 ) & ~3; - if ( ( nScanSize * ( rDesc.mnY - 1 ) + rDesc.mnScanSize + nHeaderSize ) != mpCGM->mnElementSize ) - { - mpCGM->mnParaSize = 0; // this format is corrupt - rDesc.mbStatus = sal_False; - } - } - } - } - } - rDesc.mnScanSize = nScanSize; - if ( rDesc.mbStatus ) - { - rDesc.mpBuf = mpCGM->mpSource + mpCGM->mnParaSize; // mpBuf now points to the first scanline - mpCGM->mnParaSize += rDesc.mnScanSize * rDesc.mnY; - } - return rDesc.mbStatus; -} - -// --------------------------------------------------------------- - -void CGMBitmap::ImplInsert( CGMBitmapDescriptor& rSource, CGMBitmapDescriptor& rDest ) -{ - if ( ( rSource.mnR.Y == rDest.mnQ.Y ) && ( rSource.mnR.X == rDest.mnQ.X ) ) - { // Insert on Bottom - if ( mpCGM->mnVDCYmul == -1 ) - rDest.mnOrigin = rSource.mnOrigin; // neuer origin - rDest.mpBitmap->Expand( 0, rSource.mnY ); - rDest.mpBitmap->CopyPixel( Rectangle( Point( 0, rDest.mnY ), Size( rSource.mnX, rSource.mnY ) ), - Rectangle( Point( 0, 0 ), Size( rSource.mnX, rSource.mnY ) ), rSource.mpBitmap ); - FloatPoint aFloatPoint; - aFloatPoint.X = rSource.mnQ.X - rSource.mnR.X; - aFloatPoint.Y = rSource.mnQ.Y - rSource.mnR.Y; - rDest.mnQ.X += aFloatPoint.X; - rDest.mnQ.Y += aFloatPoint.Y; - rDest.mnP = rSource.mnP; - rDest.mnR = rSource.mnR; - } - else - { // Insert on Top - if ( mpCGM->mnVDCYmul == 1 ) - rDest.mnOrigin = rSource.mnOrigin; // neuer origin - rDest.mpBitmap->Expand( 0, rSource.mnY ); - rDest.mpBitmap->CopyPixel( Rectangle( Point( 0, rDest.mnY ), Size( rSource.mnX, rSource.mnY ) ), - Rectangle( Point( 0, 0 ), Size( rSource.mnX, rSource.mnY ) ), rSource.mpBitmap ); - rDest.mnP = rSource.mnP; - rDest.mnR = rSource.mnR; - } - rDest.mnY += rSource.mnY; - rDest.mndy += rSource.mndy; -}; - -// --------------------------------------------------------------- - -CGMBitmap* CGMBitmap::GetNext() -{ - if ( pCGMBitmapDescriptor->mpBitmap && pCGMBitmapDescriptor->mbStatus ) - { - CGMBitmap* pCGMTempBitmap = new CGMBitmap( *mpCGM ); - if ( pCGMTempBitmap ) - { - if ( ( (long)pCGMTempBitmap->pCGMBitmapDescriptor->mnOrientation == (long)pCGMBitmapDescriptor->mnOrientation ) && - ( ( ( pCGMTempBitmap->pCGMBitmapDescriptor->mnR.X == pCGMBitmapDescriptor->mnQ.X ) && - ( pCGMTempBitmap->pCGMBitmapDescriptor->mnR.Y == pCGMBitmapDescriptor->mnQ.Y ) ) || - ( ( pCGMTempBitmap->pCGMBitmapDescriptor->mnQ.X == pCGMBitmapDescriptor->mnR.X ) && - ( pCGMTempBitmap->pCGMBitmapDescriptor->mnQ.Y == pCGMBitmapDescriptor->mnR.Y ) ) ) ) - { - ImplInsert( *(pCGMTempBitmap->pCGMBitmapDescriptor), *(pCGMBitmapDescriptor) ); - delete pCGMTempBitmap; - return NULL; - } - else // we'll replace the pointers and return the old one - { - CGMBitmapDescriptor* pTempBD = pCGMBitmapDescriptor; - pCGMBitmapDescriptor = pCGMTempBitmap->pCGMBitmapDescriptor; - pCGMTempBitmap->pCGMBitmapDescriptor = pTempBD; - return pCGMTempBitmap; - } - } - return NULL; - } - else - return NULL; -} - -// --------------------------------------------------------------- - -CGMBitmapDescriptor* CGMBitmap::GetBitmap() -{ - return pCGMBitmapDescriptor; -} - |