vbagx/source/utils/pngu.h

92 lines
3.3 KiB
C
Raw Normal View History

2009-08-25 19:20:54 +02:00
/********************************************************************************************
*
* PNGU
*
* Original author: frontier (http://frontier-dev.net)
* This is Tantric's modified/condensed version + RGB565 decoder from original
*
2009-08-25 19:20:54 +02:00
********************************************************************************************/
2009-08-25 19:20:54 +02:00
#ifndef __PNGU__
#define __PNGU__
2010-06-29 09:50:37 +02:00
#include <gccore.h>
2009-08-25 19:20:54 +02:00
#ifdef __cplusplus
extern "C" {
#endif
// Return codes
#define PNGU_OK 0
#define PNGU_ODD_WIDTH 1
#define PNGU_ODD_STRIDE 2
#define PNGU_INVALID_WIDTH_OR_HEIGHT 3
#define PNGU_FILE_IS_NOT_PNG 4
#define PNGU_UNSUPPORTED_COLOR_TYPE 5
#define PNGU_NO_FILE_SELECTED 6
#define PNGU_CANT_OPEN_FILE 7
#define PNGU_CANT_READ_FILE 8
#define PNGU_LIB_ERROR 9
2009-08-25 19:20:54 +02:00
typedef struct
{
2010-06-29 09:50:37 +02:00
u8 r;
u8 g;
u8 b;
2009-08-25 19:20:54 +02:00
} PNGUCOLOR;
typedef struct
{
2010-06-29 09:50:37 +02:00
u32 imgWidth; // In pixels
u32 imgHeight; // In pixels
u32 imgBitDepth; // In bitx
u32 imgColorType; // PNGU_COLOR_TYPE_*
u32 validBckgrnd; // Non zero if there is a background color
PNGUCOLOR bckgrnd; // Background color
u32 numTrans; // Number of transparent colors
2009-08-25 19:20:54 +02:00
PNGUCOLOR *trans; // Transparent colors
} PNGUPROP;
// Image context, always initialize with SelectImageFrom* and free with ReleaseImageContext
struct _IMGCTX;
typedef struct _IMGCTX *IMGCTX;
/****************************************************************************
* Image context handling *
2009-08-25 19:20:54 +02:00
****************************************************************************/
2010-06-29 09:50:37 +02:00
// Selects a PNG file, previously loaded into a buffer, and creates an image context for subsequent processing.
2009-08-25 19:20:54 +02:00
IMGCTX PNGU_SelectImageFromBuffer (const void *buffer);
2010-06-29 09:50:37 +02:00
// Selects a PNG file, from any devoptab device, and creates an image context for subsequent processing.
2009-08-25 19:20:54 +02:00
IMGCTX PNGU_SelectImageFromDevice (const char *filename);
// Frees resources associated with an image context. Always call this function when you no longer need the IMGCTX.
void PNGU_ReleaseImageContext (IMGCTX ctx);
/****************************************************************************
* Miscellaneous *
2009-08-25 19:20:54 +02:00
****************************************************************************/
// Retrieves info from selected PNG file, including image dimensions, color format, background and transparency colors.
int PNGU_GetImageProperties (IMGCTX ctx, PNGUPROP *fileproperties);
/****************************************************************************
* Image conversion *
2009-08-25 19:20:54 +02:00
****************************************************************************/
2010-06-29 09:50:37 +02:00
u8 * DecodePNG(const u8 *src, int *width, int *height, u8 *dst, int maxwidth, int maxheight);
u8 * DecodePNGFromFile(const char *filepath, int *width, int *height, u8 *dst, int maxwidth, int maxheight);
2010-06-29 09:50:37 +02:00
int PNGU_EncodeFromRGB (IMGCTX ctx, u32 width, u32 height, void *buffer, u32 stride);
int PNGU_EncodeFromGXTexture (IMGCTX ctx, u32 width, u32 height, void *buffer, u32 stride);
int PNGU_EncodeFromEFB (IMGCTX ctx, u32 width, u32 height);
2009-08-25 19:20:54 +02:00
int PNGU_DecodeTo4x4RGB565 (IMGCTX ctx, u32 width, u32 height, void *buffer);
int PNGU_EncodeFromLinearRGB565 (IMGCTX ctx, u32 width, u32 height, const void* buffer, int rowlength);
2009-08-25 19:20:54 +02:00
#ifdef __cplusplus
}
#endif
#endif