blob: e71bb86c86980f0d5a4fec686db1eaa64b8ddb52 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef _SVIMBASE_HXX
#define _SVIMBASE_HXX
#include <vcl/bitmap.hxx>
#include <vcl/salbtype.hxx>
// -----------
// - Defines -
// -----------
#define _SVHUGE
// ----------------
// - SimDepthType -
// ----------------
enum SimDepthType
{
SIM_DEPTH_1,
SIM_DEPTH_4,
SIM_DEPTH_8,
SIM_DEPTH_24
};
// ------------
// - SimColor -
// ------------
struct SimColor
{
sal_uInt8 cBlue;
sal_uInt8 cGreen;
sal_uInt8 cRed;
};
// ------------------------------------------------------------------------
inline sal_Bool operator==( const SimColor& rCol1, const SimColor& rCol2 )
{
return ( ( rCol1.cRed == rCol2.cRed ) &&
( rCol1.cGreen == rCol2.cGreen ) &&
( rCol1.cBlue == rCol2.cBlue ) );
}
// --------------
// - SimPalette -
// --------------
struct SimPalette
{
sal_uIntPtr nColors;
SimColor aColorArray[ 256 ];
};
// ---------------
// - SvImageBase -
// ---------------
class SfxViewFrame;
class SfxProgress;
class SvImageBase
{
private:
Bitmap aOutBitmap;
HPBYTE pArray1;
HPBYTE pArray2;
HPBYTE pArray3;
HPBYTE pArray4;
HPBYTE pOrgArray;
HPBYTE pDestArray;
SimPalette* pPal1;
SimPalette* pPal2;
SimPalette* pPal3;
SimPalette* pPal4;
sal_uIntPtr nWidth1;
sal_uIntPtr nWidth2;
sal_uIntPtr nWidth3;
sal_uIntPtr nWidth4;
sal_uIntPtr nHeight1;
sal_uIntPtr nHeight2;
sal_uIntPtr nHeight3;
sal_uIntPtr nHeight4;
sal_uIntPtr nAlignedWidth1;
sal_uIntPtr nAlignedWidth2;
sal_uIntPtr nAlignedWidth3;
sal_uIntPtr nAlignedWidth4;
sal_uIntPtr nWhichOrg;
SimDepthType eOrgDepth;
SimDepthType eUndoDepth;
SimDepthType eRedoDepth;
sal_Bool bIsUndo;
sal_Bool bIsRedo;
sal_Bool bCreateUndo;
sal_Bool bValid;
sal_Bool bDitherAll;
HPBYTE BitmapToArray24( const Bitmap& rBitmap, sal_uIntPtr* pWidth,
sal_uIntPtr* pHeight, sal_uIntPtr* pAlignedWidth,
SfxViewFrame *pFrame = NULL );
sal_Bool Array24ToBitmap( HPBYTE pArray, Bitmap &rBitmap,
const sal_uIntPtr nWidth, const sal_uIntPtr nHeight,
const sal_uIntPtr nColorCount = 256,
sal_uIntPtr nLast = 0, SfxProgress* pProgress = NULL );
Bitmap CreateSaveBitmap( const SimDepthType eDepth, SfxViewFrame *pFrame = NULL );
HPBYTE CreateArray24( sal_uIntPtr nWidth, sal_uIntPtr nHeight );
void DeleteArray( HPBYTE pArray );
SvImageBase(const SvImageBase& rSvImageBase);
const SvImageBase& operator=(const SvImageBase& rSvImageBase);
public:
SvImageBase();
SvImageBase( const Bitmap& rBitmap,
const sal_uIntPtr nColorCount = 256,
sal_uIntPtr nLast = 0, SfxProgress* pProgress = NULL );
~SvImageBase();
sal_Bool IsValid() { return bValid; }
sal_uIntPtr GetOrgWidth() const { return nWhichOrg == 1 ? nWidth1 : nWidth2; }
sal_uIntPtr GetDestWidth() const { return nWhichOrg == 1 ? nWidth2 : nWidth1; }
sal_uIntPtr GetOrgHeight() const { return nWhichOrg == 1 ? nHeight1 : nHeight2; }
sal_uIntPtr GetDestHeight() const { return nWhichOrg == 1 ? nHeight2 : nHeight1; }
sal_uIntPtr GetOrgAlignedWidth() const { return nWhichOrg == 1 ? nAlignedWidth1 : nAlignedWidth2; }
sal_uIntPtr GetDestAlignedWidth() const { return nWhichOrg == 1 ? nAlignedWidth2 : nAlignedWidth1; }
sal_uIntPtr GetOrgAlignedSize() const { return GetOrgAlignedWidth() * GetOrgHeight(); }
sal_uIntPtr GetDestAlignedSize() const { return GetDestAlignedWidth() * GetDestHeight(); }
// Farbtiefe des Ausgangsbildes ermitteln und setzen
SimDepthType GetDepth() const { return eOrgDepth; }
void SetDepth( const SimDepthType eDepth ) { eOrgDepth = eDepth; }
// Farbtiefen nach Undo und Redo ermitteln und setzen
SimDepthType GetUndoDepth() const { return eUndoDepth; }
void SetUndoDepth(const SimDepthType eDepth) { eUndoDepth = eDepth; }
SimDepthType GetRedoDepth() const { return eRedoDepth; }
void SetRedoDepth(const SimDepthType eDepth) { eRedoDepth = eDepth; }
// Vor- und Ruecklauf der Bildverarbeitung
sal_Bool BeginProcessing( sal_Bool bUndo = sal_True );
void EndProcessing();
sal_Bool BeginProcessingExt(sal_uIntPtr nWidth, sal_uIntPtr nHeight, sal_Bool bUndo = sal_True);
void EndProcessingExt() { EndProcessing(); }
// Zeiger auf Arrays zur Verfuegung stellen
HPBYTE GetOrgPointer() { return pOrgArray; }
HPBYTE GetDestPointer() { return pDestArray; }
// DIB-Erzeugung fuer Anzeige
sal_Bool CreateOutBitmap( const sal_uIntPtr nColorCount = 256, sal_uIntPtr nLast = 0,
SfxProgress* pProgress = NULL );
// Undo-Verwaltung
sal_Bool DoUndo( SfxProgress* pProgress = NULL );
sal_Bool DoRedo( SfxProgress* pProgress = NULL );
// DIB-Rueckgabe fuer Anzeige
const Bitmap& GetOutBitmap() const;
// DIB-Rueckgabe fuer Speicherung
Bitmap GetSaveBitmap();
// Palette besorgen
SimPalette* GetOrgPalette() const { return nWhichOrg == 1 ? pPal1 : pPal2; }
SimPalette* GetDestPalette() const { return nWhichOrg == 1 ? pPal2 : pPal1; }
};
// ----------------
// - DitherBitmap -
// ----------------
sal_Bool DitherBitmap( Bitmap& rBitmap, sal_Bool bDitherAlways = sal_False );
#endif // _SVIMBASE_HXX