forked from a1batross/Paranoia2_original
122 lines
3.7 KiB
C
122 lines
3.7 KiB
C
/*
|
|
imagelib.h - simple loader\serializer for TGA & BMP
|
|
Copyright (C) 2015 Uncle Mike
|
|
|
|
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 3 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.
|
|
*/
|
|
|
|
#ifndef IMAGELIB_H
|
|
#define IMAGELIB_H
|
|
|
|
/*
|
|
========================================================================
|
|
|
|
.BMP image format
|
|
|
|
========================================================================
|
|
*/
|
|
#pragma pack( 1 )
|
|
typedef struct
|
|
{
|
|
char id[2]; // bmfh.bfType
|
|
dword fileSize; // bmfh.bfSize
|
|
dword reserved0; // bmfh.bfReserved1 + bmfh.bfReserved2
|
|
dword bitmapDataOffset; // bmfh.bfOffBits
|
|
dword bitmapHeaderSize; // bmih.biSize
|
|
int width; // bmih.biWidth
|
|
int height; // bmih.biHeight
|
|
word planes; // bmih.biPlanes
|
|
word bitsPerPixel; // bmih.biBitCount
|
|
dword compression; // bmih.biCompression
|
|
dword bitmapDataSize; // bmih.biSizeImage
|
|
dword hRes; // bmih.biXPelsPerMeter
|
|
dword vRes; // bmih.biYPelsPerMeter
|
|
dword colors; // bmih.biClrUsed
|
|
dword importantColors; // bmih.biClrImportant
|
|
} bmp_t;
|
|
#pragma pack( )
|
|
|
|
/*
|
|
========================================================================
|
|
|
|
.TGA image format (Truevision Targa)
|
|
|
|
========================================================================
|
|
*/
|
|
#pragma pack( 1 )
|
|
typedef struct tga_s
|
|
{
|
|
byte id_length;
|
|
byte colormap_type;
|
|
byte image_type;
|
|
word colormap_index;
|
|
word colormap_length;
|
|
byte colormap_size;
|
|
word x_origin;
|
|
word y_origin;
|
|
word width;
|
|
word height;
|
|
byte pixel_size;
|
|
byte attributes;
|
|
} tga_t;
|
|
#pragma pack( )
|
|
|
|
#define IMAGE_MINWIDTH 1 // last mip-level is 1x1
|
|
#define IMAGE_MINHEIGHT 1
|
|
#define IMAGE_MAXWIDTH 4096
|
|
#define IMAGE_MAXHEIGHT 4096
|
|
#define MIP_MAXWIDTH 512 // large sizes it's too complicated for quantizer
|
|
#define MIP_MAXHEIGHT 512 // and provoked color degradation
|
|
|
|
#define IMAGE_HAS_ALPHA (IMAGE_HAS_1BIT_ALPHA|IMAGE_HAS_8BIT_ALPHA)
|
|
|
|
// rgbdata->flags
|
|
typedef enum
|
|
{
|
|
IMAGE_QUANTIZED = BIT( 0 ), // this image already quantized
|
|
IMAGE_HAS_COLOR = BIT( 1 ), // image contain RGB-channel
|
|
IMAGE_HAS_1BIT_ALPHA = BIT( 2 ), // textures with '{'
|
|
IMAGE_HAS_8BIT_ALPHA = BIT( 3 ), // image contain full-range alpha-channel
|
|
|
|
// Image_Process manipulation flags
|
|
IMAGE_FLIP_X = BIT( 6 ), // flip the image by width
|
|
IMAGE_FLIP_Y = BIT( 7 ), // flip the image by height
|
|
IMAGE_ROT_90 = BIT( 8 ), // flip from upper left corner to down right corner
|
|
IMAGE_ROT180 = IMAGE_FLIP_X|IMAGE_FLIP_Y,
|
|
IMAGE_ROT270 = IMAGE_FLIP_X|IMAGE_FLIP_Y|IMAGE_ROT_90,
|
|
} imgFlags_t;
|
|
|
|
// loaded image
|
|
typedef struct rgbdata_s
|
|
{
|
|
word width; // image width
|
|
word height; // image height
|
|
word flags; // misc image flags
|
|
byte *palette; // palette if present
|
|
byte *buffer; // image buffer
|
|
size_t size; // for bounds checking
|
|
} rgbdata_t;
|
|
|
|
// common functions
|
|
rgbdata_t *Image_Alloc( int width, int height, bool paletted = false );
|
|
rgbdata_t *Image_Copy( rgbdata_t *src );
|
|
rgbdata_t *COM_LoadImage( const char *filename );
|
|
rgbdata_t *COM_LoadImageMemory( const char *filename, const byte *buf, size_t fileSize );
|
|
bool Image_ValidSize( const char *name, int width, int height );
|
|
rgbdata_t *Image_Resample( rgbdata_t *pic, int new_width, int new_height );
|
|
rgbdata_t *Image_Quantize( rgbdata_t *pic );
|
|
void Image_MakeOneBitAlpha( rgbdata_t *pic );
|
|
void Image_ApplyGamma( rgbdata_t *pic );
|
|
rgbdata_t *Image_Flip( rgbdata_t *src );
|
|
|
|
extern float g_gamma;
|
|
|
|
#endif//IMAGELIB_H
|