summaryrefslogtreecommitdiff
path: root/goodies/source/filter.vcl/iras/iras.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'goodies/source/filter.vcl/iras/iras.cxx')
-rw-r--r--goodies/source/filter.vcl/iras/iras.cxx386
1 files changed, 0 insertions, 386 deletions
diff --git a/goodies/source/filter.vcl/iras/iras.cxx b/goodies/source/filter.vcl/iras/iras.cxx
deleted file mode 100644
index 841562b33298..000000000000
--- a/goodies/source/filter.vcl/iras/iras.cxx
+++ /dev/null
@@ -1,386 +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: iras.cxx,v $
- * $Revision: 1.10 $
- *
- * 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 <vcl/graph.hxx>
-#include <vcl/bmpacc.hxx>
-#include <svtools/fltcall.hxx>
-
-#define RAS_TYPE_OLD 0x00000000 // supported formats by this filter
-#define RAS_TYPE_STANDARD 0x00000001
-#define RAS_TYPE_BYTE_ENCODED 0x00000002
-#define RAS_TYPE_RGB_FORMAT 0x00000003
-
-#define RAS_COLOR_NO_MAP 0x00000000
-#define RAS_COLOR_RGB_MAP 0x00000001
-#define RAS_COLOR_RAW_MAP 0x00000002
-
-#define SUNRASTER_MAGICNUMBER 0x59a66a95
-
-//============================ RASReader ==================================
-
-class RASReader {
-
-private:
-
- SvStream* mpRAS; // Die einzulesende RAS-Datei
-
- BOOL mbStatus;
- Bitmap maBmp;
- BitmapWriteAccess* mpAcc;
- sal_uInt32 mnWidth, mnHeight; // Bildausmass in Pixeln
- USHORT mnDstBitsPerPix;
- USHORT mnDstColors;
- sal_uInt32 mnDepth, mnImageDatSize, mnType;
- sal_uInt32 mnColorMapType, mnColorMapSize;
- BYTE mnRepCount, mnRepVal; // RLE Decoding
- BOOL mbPalette;
-
- BOOL ImplReadBody();
- BOOL ImplReadHeader();
- BYTE ImplGetByte();
-
-public:
- RASReader();
- ~RASReader();
- BOOL ReadRAS( SvStream & rRAS, Graphic & rGraphic );
-};
-
-//=================== Methoden von RASReader ==============================
-
-RASReader::RASReader() :
- mbStatus ( TRUE ),
- mpAcc ( NULL ),
- mnRepCount ( 0 ),
- mbPalette ( FALSE )
-{
-}
-
-RASReader::~RASReader()
-{
-}
-
-//----------------------------------------------------------------------------
-
-BOOL RASReader::ReadRAS( SvStream & rRAS, Graphic & rGraphic )
-{
- UINT32 nMagicNumber;
-
- if ( rRAS.GetError() )
- return FALSE;
-
- mpRAS = &rRAS;
- mpRAS->SetNumberFormatInt( NUMBERFORMAT_INT_BIGENDIAN );
- *mpRAS >> nMagicNumber;
- if ( nMagicNumber != SUNRASTER_MAGICNUMBER )
- return FALSE;
-
- // Kopf einlesen:
-
- if ( ( mbStatus = ImplReadHeader() ) == FALSE )
- return FALSE;
-
- maBmp = Bitmap( Size( mnWidth, mnHeight ), mnDstBitsPerPix );
- if ( ( mpAcc = maBmp.AcquireWriteAccess() ) == FALSE )
- return FALSE;
-
- if ( mnDstBitsPerPix <= 8 ) // paletten bildchen
- {
- if ( mnColorMapType == RAS_COLOR_RAW_MAP ) // RAW Colormap wird geskipped
- {
- ULONG nCurPos = mpRAS->Tell();
- mpRAS->Seek( nCurPos + mnColorMapSize );
- }
- else if ( mnColorMapType == RAS_COLOR_RGB_MAP ) // RGB koennen wir auslesen
- {
- mnDstColors = (USHORT)( mnColorMapSize / 3 );
-
- if ( ( 1 << mnDstBitsPerPix ) < mnDstColors )
- return FALSE;
-
- if ( ( mnDstColors >= 2 ) && ( ( mnColorMapSize % 3 ) == 0 ) )
- {
- mpAcc->SetPaletteEntryCount( mnDstColors );
- USHORT i;
- BYTE nRed[256], nGreen[256], nBlue[256];
- for ( i = 0; i < mnDstColors; i++ ) *mpRAS >> nRed[ i ];
- for ( i = 0; i < mnDstColors; i++ ) *mpRAS >> nGreen[ i ];
- for ( i = 0; i < mnDstColors; i++ ) *mpRAS >> nBlue[ i ];
- for ( i = 0; i < mnDstColors; i++ )
- {
- mpAcc->SetPaletteColor( i, BitmapColor( nRed[ i ], nGreen[ i ], nBlue[ i ] ) );
- }
- mbPalette = TRUE;
- }
- else
- return FALSE;
-
- }
- else if ( mnColorMapType != RAS_COLOR_NO_MAP ) // alles andere ist kein standard
- return FALSE;
-
- if ( !mbPalette )
- {
- mnDstColors = 1 << mnDstBitsPerPix;
- mpAcc->SetPaletteEntryCount( mnDstColors );
- for ( USHORT i = 0; i < mnDstColors; i++ )
- {
- ULONG nCount = 255 - ( 255 * i / ( mnDstColors - 1 ) );
- mpAcc->SetPaletteColor( i, BitmapColor( (BYTE)nCount, (BYTE)nCount, (BYTE)nCount ) );
- }
- }
- }
- else
- {
- if ( mnColorMapType != RAS_COLOR_NO_MAP ) // when graphic has more then 256 colors and a color map we skip
- { // the colormap
- ULONG nCurPos = mpRAS->Tell();
- mpRAS->Seek( nCurPos + mnColorMapSize );
- }
- }
-
- // Bitmap-Daten einlesen
- mbStatus = ImplReadBody();
-
- if ( mpAcc )
- {
- maBmp.ReleaseAccess( mpAcc ), mpAcc = NULL;
- }
- if ( mbStatus )
- rGraphic = maBmp;
-
- return mbStatus;
-}
-
-//----------------------------------------------------------------------------
-
-BOOL RASReader::ImplReadHeader()
-{
- *mpRAS >> mnWidth >> mnHeight >> mnDepth >> mnImageDatSize >>
- mnType >> mnColorMapType >> mnColorMapSize;
-
- if ( mnWidth == 0 || mnHeight == 0 )
- mbStatus = FALSE;
-
- switch ( mnDepth )
- {
- case 24 :
- case 8 :
- case 1 :
- mnDstBitsPerPix = (USHORT)mnDepth;
- break;
- case 32 :
- mnDstBitsPerPix = 24;
- break;
-
- default :
- mbStatus = FALSE;
- }
-
- switch ( mnType )
- {
- case RAS_TYPE_OLD :
- case RAS_TYPE_STANDARD :
- case RAS_TYPE_RGB_FORMAT :
- case RAS_TYPE_BYTE_ENCODED : // this type will be supported later
- break;
-
- default:
- mbStatus = FALSE;
- }
- return mbStatus;
-}
-
-//----------------------------------------------------------------------------
-
-BOOL RASReader::ImplReadBody()
-{
- ULONG x, y;
- BYTE nDat = 0;
- BYTE nRed, nGreen, nBlue;
- switch ( mnDstBitsPerPix )
- {
- case 1 :
- for ( y = 0; y < mnHeight; y++ )
- {
- for ( x = 0; x < mnWidth; x++ )
- {
- if (!(x & 7))
- nDat = ImplGetByte();
- mpAcc->SetPixel (
- y, x,
- sal::static_int_cast< BYTE >(
- nDat >> ( ( x & 7 ) ^ 7 )) );
- }
- if (!( ( x - 1 ) & 0x8 ) ) ImplGetByte(); // WORD ALIGNMENT ???
- }
- break;
-
- case 8 :
- for ( y = 0; y < mnHeight; y++ )
- {
- for ( x = 0; x < mnWidth; x++ )
- {
- nDat = ImplGetByte();
- mpAcc->SetPixel ( y, x, nDat );
- }
- if ( x & 1 ) ImplGetByte(); // WORD ALIGNMENT ???
- }
- break;
-
- case 24 :
- switch ( mnDepth )
- {
-
- case 24 :
- for ( y = 0; y < mnHeight; y++ )
- {
- for ( x = 0; x < mnWidth; x++ )
- {
- if ( mnType == RAS_TYPE_RGB_FORMAT )
- {
- nRed = ImplGetByte();
- nGreen = ImplGetByte();
- nBlue = ImplGetByte();
- }
- else
- {
- nBlue = ImplGetByte();
- nGreen = ImplGetByte();
- nRed = ImplGetByte();
- }
- mpAcc->SetPixel ( y, x, BitmapColor( nRed, nGreen, nBlue ) );
- }
- if ( x & 1 ) ImplGetByte(); // WORD ALIGNMENT ???
- }
- break;
-
- case 32 :
- for ( y = 0; y < mnHeight; y++ )
- {
- for ( x = 0; x < mnWidth; x++ )
- {
- nDat = ImplGetByte(); // pad byte > nil
- if ( mnType == RAS_TYPE_RGB_FORMAT )
- {
- nRed = ImplGetByte();
- nGreen = ImplGetByte();
- nBlue = ImplGetByte();
- }
- else
- {
- nBlue = ImplGetByte();
- nGreen = ImplGetByte();
- nRed = ImplGetByte();
- }
- mpAcc->SetPixel ( y, x, BitmapColor( nRed, nGreen, nBlue ) );
- }
- }
- break;
- }
- break;
-
- default:
- mbStatus = FALSE;
- break;
- }
- return mbStatus;
-}
-
-//----------------------------------------------------------------------------
-
-BYTE RASReader::ImplGetByte()
-{
- BYTE nRetVal;
- if ( mnType != RAS_TYPE_BYTE_ENCODED )
- {
- *mpRAS >> nRetVal;
- return nRetVal;
- }
- else
- {
- if ( mnRepCount )
- {
- mnRepCount--;
- return mnRepVal;
- }
- else
- {
- *mpRAS >> nRetVal;
- if ( nRetVal != 0x80 )
- return nRetVal;
- *mpRAS >> nRetVal;
- if ( nRetVal == 0 )
- return 0x80;
- mnRepCount = nRetVal ;
- *mpRAS >> mnRepVal;
- return mnRepVal;
- }
- }
-}
-
-//================== GraphicImport - die exportierte Funktion ================
-
-extern "C" BOOL __LOADONCALLAPI GraphicImport(SvStream & rStream, Graphic & rGraphic, FilterConfigItem*, BOOL )
-{
- RASReader aRASReader;
-
- return aRASReader.ReadRAS( rStream, rGraphic );
-}
-
-//================== ein bischen Muell fuer Windows ==========================
-#ifndef GCC
-#endif
-
-#ifdef WIN
-
-static HINSTANCE hDLLInst = 0; // HANDLE der DLL
-
-extern "C" int CALLBACK LibMain( HINSTANCE hDLL, WORD, WORD nHeap, LPSTR )
-{
-#ifndef WNT
- if ( nHeap )
- UnlockData( 0 );
-#endif
-
- hDLLInst = hDLL;
-
- return TRUE;
-}
-
-extern "C" int CALLBACK WEP( int )
-{
- return 1;
-}
-
-#endif
-