#ifndef TGA_TRANSLATOR_H
#define TGA_TRANSLATOR_H
#include <Translator.h>
#include <TranslatorFormats.h>
#include <TranslationDefs.h>
#include <GraphicsDefs.h>
#include <InterfaceDefs.h>
#include <DataIO.h>
#include <ByteOrder.h>
#include "BaseTranslator.h"
#define TGA_TRANSLATOR_VERSION B_TRANSLATION_MAKE_VERSION(1,0,0)
#define TGA_IN_QUALITY 0.7
#define TGA_IN_CAPABILITY 0.8
#define TGA_OUT_QUALITY 0.7
#define TGA_OUT_CAPABILITY 0.6
#define BBT_IN_QUALITY 0.7
#define BBT_IN_CAPABILITY 0.6
#define BBT_OUT_QUALITY 0.6
#define BBT_OUT_CAPABILITY 0.8
#define TGA_SETTING_RLE "tga /rle"
#define TGA_SETTING_IGNORE_ALPHA "tga /ignore_alpha"
struct TGAFileHeader {
uint8 idlength;
uint8 colormaptype;
uint8 imagetype;
};
#define TGA_NO_COLORMAP 0
#define TGA_COLORMAP 1
#define TGA_NO_IMAGE_DATA 0
#define TGA_NOCOMP_COLORMAP 1
#define TGA_NOCOMP_TRUECOLOR 2
#define TGA_NOCOMP_BW 3
#define TGA_RLE_COLORMAP 9
#define TGA_RLE_TRUECOLOR 10
#define TGA_RLE_BW 11
struct TGAColorMapSpec {
uint16 firstentry;
uint16 length;
uint8 entrysize;
};
struct TGAImageSpec {
uint16 xorigin;
uint16 yorigin;
uint16 width;
uint16 height;
uint8 depth;
uint8 descriptor;
};
#define TGA_ORIGIN_VERT_BIT 0x20
#define TGA_ORIGIN_BOTTOM 0
#define TGA_ORIGIN_TOP 1
#define TGA_ORIGIN_HORZ_BIT 0x10
#define TGA_ORIGIN_LEFT 0
#define TGA_ORIGIN_RIGHT 1
#define TGA_DESC_BITS76 0xc0
#define TGA_DESC_ALPHABITS 0x0f
#define TGA_RLE_PACKET_TYPE_BIT 0x80
#define TGA_HEADERS_SIZE 18
#define TGA_STREAM_BUFFER_SIZE 1024
class TGATranslator : public BaseTranslator {
public:
TGATranslator();
virtual status_t DerivedIdentify(BPositionIO *inSource,
const translation_format *inFormat, BMessage *ioExtension,
translator_info *outInfo, uint32 outType);
virtual status_t DerivedTranslate(BPositionIO *inSource,
const translator_info *inInfo, BMessage *ioExtension,
uint32 outType, BPositionIO *outDestination, int32 baseType);
virtual BView *NewConfigView(TranslatorSettings *settings);
protected:
virtual ~TGATranslator();
private:
uint8 tga_alphabits(TGAFileHeader &filehead, TGAColorMapSpec &mapspec,
TGAImageSpec &imagespec);
status_t translate_from_bits(BPositionIO *inSource, uint32 outType,
BPositionIO *outDestination);
status_t translate_from_tganm_to_bits(BPositionIO *inSource,
BPositionIO *outDestination, TGAFileHeader &filehead,
TGAColorMapSpec &mapspec, TGAImageSpec &imagespec);
status_t translate_from_tganmrle_to_bits(BPositionIO *inSource,
BPositionIO *outDestination, TGAFileHeader &filehead,
TGAColorMapSpec &mapspec, TGAImageSpec &imagespec);
status_t translate_from_tgamrle_to_bits(BPositionIO *inSource,
BPositionIO *outDestination, TGAFileHeader &filehead,
TGAColorMapSpec &mapspec, TGAImageSpec &imagespec, uint8 *pmap);
status_t translate_from_tga(BPositionIO *inSource, uint32 outType,
BPositionIO *outDestination);
};
#endif