149 lines
4.7 KiB
C
149 lines
4.7 KiB
C
/******************************************************************************
|
|
*
|
|
* Copyright (c) 1994-1999 Palm Computing, Inc. or its subsidiaries.
|
|
* All rights reserved.
|
|
*
|
|
* File: Bitmap.h
|
|
*
|
|
* Description:
|
|
* This file defines bitmap structures and routines.
|
|
*
|
|
* History:
|
|
* September, 1999 Created by Bertrand Simon
|
|
* Name Date Description
|
|
* ---- ---- -----------
|
|
* BS 9/99 Create
|
|
* jmp 12/23/99 Fix <> vs. "" problem.
|
|
*
|
|
*****************************************************************************/
|
|
|
|
#ifndef __BITMAP_H__
|
|
#define __BITMAP_H__
|
|
|
|
#include <PalmTypes.h>
|
|
#include <CoreTraps.h>
|
|
|
|
#include <PalmOptErrorCheckLevel.h> // #define ERROR_CHECK_LEVEL
|
|
|
|
|
|
//-----------------------------------------------
|
|
// The Bitmap Structure.
|
|
//-----------------------------------------------
|
|
|
|
// bitmap version numbers
|
|
#define BitmapVersionZero 0
|
|
#define BitmapVersionOne 1
|
|
#define BitmapVersionTwo 2
|
|
|
|
// Compression Types for BitMap BitmapVersionTwo.
|
|
typedef enum {
|
|
BitmapCompressionTypeScanLine = 0,
|
|
BitmapCompressionTypeRLE,
|
|
|
|
BitmapCompressionTypeNone = 0xFF
|
|
} BitmapCompressionType;
|
|
|
|
typedef struct BitmapFlagsType {
|
|
UInt16 compressed:1; // Data format: 0=raw; 1=compressed
|
|
UInt16 hasColorTable:1; // if true, color table stored before bits[]
|
|
UInt16 hasTransparency:1; // true if transparency is used
|
|
UInt16 indirect:1; // true if bits are stored indirectly
|
|
UInt16 forScreen:1; // system use only
|
|
UInt16 reserved:11;
|
|
} BitmapFlagsType;
|
|
|
|
// this definition correspond to the 'Tbmp' and 'tAIB' resource types
|
|
typedef struct BitmapType {
|
|
Int16 width;
|
|
Int16 height;
|
|
UInt16 rowBytes;
|
|
BitmapFlagsType flags;
|
|
UInt8 pixelSize; // bits/pixel
|
|
UInt8 version; // version of bitmap. This is vers 2
|
|
UInt16 nextDepthOffset; // # of DWords to next BitmapType
|
|
// from beginnning of this one
|
|
UInt8 transparentIndex; // v2 only, if flags.hasTransparency is true,
|
|
// index number of transparent color
|
|
UInt8 compressionType; // v2 only, if flags.compressed is true, this is
|
|
// the type, see BitmapCompressionType
|
|
|
|
UInt16 reserved; // for future use, must be zero!
|
|
|
|
// [colorTableType] pixels | pixels*
|
|
// If hasColorTable != 0, we have:
|
|
// ColorTableType followed by pixels.
|
|
// If hasColorTable == 0:
|
|
// this is the start of the pixels
|
|
// if indirect != 0 bits are stored indirectly.
|
|
// the address of bits is stored here
|
|
// In some cases the ColorTableType will
|
|
// have 0 entries and be 2 bytes long.
|
|
} BitmapType;
|
|
|
|
typedef BitmapType *BitmapPtr;
|
|
|
|
|
|
// This is the structure of a color table. It maps pixel values into
|
|
// RGB colors. Each element in the table corresponds to the next
|
|
// index, starting at 0.
|
|
|
|
typedef struct RGBColorType {
|
|
UInt8 index; // index of color or best match to cur CLUT or unused.
|
|
UInt8 r; // amount of red, 0->255
|
|
UInt8 g; // amount of green, 0->255
|
|
UInt8 b; // amount of blue, 0->255
|
|
} RGBColorType;
|
|
|
|
|
|
typedef struct ColorTableType {
|
|
// high bits (numEntries > 256) reserved
|
|
UInt16 numEntries; // number of entries in table
|
|
// RGBColorType entry[]; // array 0..numEntries-1 of colors
|
|
// starts immediately after numEntries
|
|
} ColorTableType;
|
|
|
|
|
|
// get start of color table entries aray given pointer to ColorTableType
|
|
#define ColorTableEntries(ctP) ((RGBColorType *)((ColorTableType *)(ctP)+1))
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
//-----------------------------------------------
|
|
// Routines relating to bitmap management
|
|
//-----------------------------------------------
|
|
|
|
extern BitmapType *BmpCreate (Coord width, Coord height, UInt8 depth,
|
|
ColorTableType *colortableP, UInt16 *error)
|
|
SYS_TRAP(sysTrapBmpCreate);
|
|
|
|
extern Err BmpDelete (BitmapType *bitmapP)
|
|
SYS_TRAP(sysTrapBmpDelete);
|
|
|
|
extern Err BmpCompress(BitmapType *bitmapP, BitmapCompressionType compType )
|
|
SYS_TRAP(sysTrapBmpCompress);
|
|
|
|
extern void *BmpGetBits(BitmapType *bitmapP)
|
|
SYS_TRAP(sysTrapBmpGetBits);
|
|
|
|
extern ColorTableType *BmpGetColortable(BitmapType *bitmapP)
|
|
SYS_TRAP(sysTrapBmpGetColortable);
|
|
|
|
extern UInt16 BmpSize(BitmapType *bitmapP)
|
|
SYS_TRAP(sysTrapBmpSize);
|
|
|
|
extern UInt16 BmpBitsSize(BitmapType *bitmapP)
|
|
SYS_TRAP(sysTrapBmpBitsSize);
|
|
|
|
extern UInt16 BmpColortableSize(BitmapType *bitmapP)
|
|
SYS_TRAP(sysTrapBmpColortableSize);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
#endif //__BITMAP_H__
|
|
|