/* -*- mode: C++; tab-width: 4; c-basic-offset: 4; -*- */ /* AbiWord * Copyright (C) 1998 AbiSource, Inc. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef IE_IMPGRAPHIC_BMP_H #define IE_IMPGRAPHIC_BMP_H #include "ut_bytebuf.h" #include "png.h" #include "ie_impGraphic.h" class IE_ImpGraphicBMP_Sniffer : public IE_ImpGraphicSniffer { public: virtual const IE_SuffixConfidence * getSuffixConfidence (); virtual const IE_MimeConfidence * getMimeConfidence () { return NULL; } virtual UT_Confidence_t recognizeContents (const char * szBuf, UT_uint32 iNumbytes); virtual bool getDlgLabels (const char ** szDesc, const char ** szSuffixList, IEGraphicFileType * ft); virtual UT_Error constructImporter (IE_ImpGraphic ** ppieg); }; class IE_ImpGraphic_BMP : public IE_ImpGraphic { public: virtual UT_Error importGraphic(UT_ByteBuf* pBB, FG_Graphic ** ppfg); private: // PNG structures used png_structp m_pPNG; // libpng structure for the PNG Object png_infop m_pPNGInfo; // libpng structure for info on the PNG Object // BMP File Header Data UT_uint16 m_iFileType; // type - 'BM' for Bitmaps UT_uint32 m_iFileSize; // file size in bytes UT_uint16 m_iXHotspot; // 0 or x hotspot UT_uint16 m_iYHotspot; // 0 or y hotspot UT_uint32 m_iOffset; // Offset to BMP image // BMP Header Data UT_uint32 m_iHeaderSize; // Size of Header Data UT_sint32 m_iWidth; // Image Width in pixels UT_sint32 m_iHeight; // Image Height in pixels UT_uint16 m_iPlanes; // Number of Planes == 1 UT_uint16 m_iBitsPerPlane; // Bit per pixel UT_uint32 m_iCompression; // compression flag UT_uint32 m_iImageSize; // Image size in bytes UT_uint32 m_iXResolution; // Horizontal Resolution (Pels/Meter) UT_uint32 m_iYResolution; // Vertical Resolution (Pels/Meter) UT_uint32 m_iClrUsed; // Color Table Size UT_uint32 m_iClrImportant; // Important Color Count UT_uint16 m_iResolutionUnits; // Units of Measure UT_uint16 m_iPadding; // Reserved UT_uint16 m_iOrigin; // Recording Algorithm UT_uint16 m_iHalfToning; // Halftoning Algorithm UT_uint32 m_iHalfToningParam1;// Size Value 1 UT_uint32 m_iHalfToningParam2;// Size Value 2 UT_uint32 m_iClrEncoding; // Color Encoding UT_uint32 m_iIdentifier; // // BMP Utility Data UT_uint32 m_iBytesRead; // Number of Bytes Read bool m_bOldBMPFormat; // Older smaller file type bool m_bHeaderDone; // Check to see if finshed Reading Header void InitializePrivateClassData(); UT_Error _convertGraphic(UT_ByteBuf * pBB); // Functions for Reading Bitmaps UT_Error Read_BMP_Header (UT_ByteBuf* pBB); UT_Error Initialize_PNG(); UT_Error Convert_BMP_Pallet (UT_ByteBuf* pBB); UT_Error Convert_BMP (UT_ByteBuf* pBB); // Function to Read ByteBuffer UT_Byte ReadByte (UT_ByteBuf* pBB, UT_uint32 offset); UT_uint16 Read2Bytes(UT_ByteBuf* pBB, UT_uint32 offset); UT_uint32 Read4Bytes(UT_ByteBuf* pBB, UT_uint32 offset); UT_uint32 ReadBytes (UT_ByteBuf* pBB, UT_uint32 offset, UT_uint32 num_bytes); UT_ByteBuf* m_pBB; // pBB Converted to PNG File }; #endif /* IE_IMPGRAPHIC_BMP_H */