1/*****************************************************************************/ 2// BMPTranslator 3// BMPTranslator.h 4// 5// This BTranslator based object is for opening and writing BMP files. 6// 7// 8// Copyright (c) 2002 Haiku Project 9// 10// Permission is hereby granted, free of charge, to any person obtaining a 11// copy of this software and associated documentation files (the "Software"), 12// to deal in the Software without restriction, including without limitation 13// the rights to use, copy, modify, merge, publish, distribute, sublicense, 14// and/or sell copies of the Software, and to permit persons to whom the 15// Software is furnished to do so, subject to the following conditions: 16// 17// The above copyright notice and this permission notice shall be included 18// in all copies or substantial portions of the Software. 19// 20// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 21// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 23// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 25// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 26// DEALINGS IN THE SOFTWARE. 27/*****************************************************************************/ 28 29#ifndef BMP_TRANSLATOR_H 30#define BMP_TRANSLATOR_H 31 32#include <ByteOrder.h> 33#include <Catalog.h> 34#include <DataIO.h> 35#include <GraphicsDefs.h> 36#include <InterfaceDefs.h> 37#include <Locale.h> 38#include <Translator.h> 39#include <TranslatorFormats.h> 40#include <TranslationDefs.h> 41 42#include "BaseTranslator.h" 43 44#define BMP_NO_COMPRESS 0 45#define BMP_RLE8_COMPRESS 1 46#define BMP_RLE4_COMPRESS 2 47 48#define BMP_TRANSLATOR_VERSION B_TRANSLATION_MAKE_VERSION(1,0,0) 49#define BMP_IN_QUALITY 0.4 50#define BMP_IN_CAPABILITY 0.8 51#define BMP_OUT_QUALITY 0.4 52#define BMP_OUT_CAPABILITY 0.8 53 54#define BBT_IN_QUALITY 0.4 55#define BBT_IN_CAPABILITY 0.6 56#define BBT_OUT_QUALITY 0.4 57#define BBT_OUT_CAPABILITY 0.6 58 59 60struct BMPFileHeader { 61 // for both MS and OS/2 BMP formats 62 uint16 magic; // = 'BM' 63 uint32 fileSize; // file size in bytes 64 uint32 reserved; // equals 0 65 uint32 dataOffset; // file offset to actual image 66}; 67 68struct MSInfoHeader { 69 uint32 size; // size of this struct (40) 70 int32 width; // bitmap width 71 int32 height; // bitmap height 72 uint16 planes; // number of planes, always 1? 73 uint16 bitsperpixel; // bits per pixel, (1,4,8,16, 24 or 32) 74 uint32 compression; // type of compression 75 uint32 imagesize; // size of image data if compressed 76 uint32 xpixperm; // horizontal pixels per meter 77 uint32 ypixperm; // vertical pixels per meter 78 uint32 colorsused; // number of actually used colors 79 uint32 colorsimportant; // number of important colors, zero = all 80}; 81 82struct OS2InfoHeader { 83 uint32 size; // size of this struct (12) 84 uint16 width; // bitmap width 85 uint16 height; // bitmap height 86 uint16 planes; // number of planes, always 1? 87 uint16 bitsperpixel; // bits per pixel, (1,4,8,16, 24 or 32) 88}; 89 90class BMPTranslator : public BaseTranslator { 91public: 92 BMPTranslator(); 93 94 virtual status_t DerivedIdentify(BPositionIO *inSource, 95 const translation_format *inFormat, BMessage *ioExtension, 96 translator_info *outInfo, uint32 outType); 97 98 virtual status_t DerivedTranslate(BPositionIO *inSource, 99 const translator_info *inInfo, BMessage *ioExtension, 100 uint32 outType, BPositionIO *outDestination, int32 baseType); 101 102 virtual BView *NewConfigView(TranslatorSettings *settings); 103 104protected: 105 virtual ~BMPTranslator(); 106 // this is protected because the object is deleted by the 107 // Release() function instead of being deleted directly by 108 // the user 109 110private: 111 112 status_t translate_from_bits(BPositionIO *inSource, uint32 outType, 113 BPositionIO *outDestination); 114 115 status_t translate_from_bmp(BPositionIO *inSource, uint32 outType, 116 BPositionIO *outDestination); 117}; 118 119#endif // #ifndef BMP_TRANSLATOR_H 120