home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 2001 January
/
VPR0101A.BIN
/
OLS
/
LZR100
/
lzr100.lzh
/
Source
/
GIFDecode.h
< prev
next >
Wrap
C/C++ Source or Header
|
2000-10-07
|
4KB
|
87 lines
/*--------------------------------------------------------------------------------------*/
/* 非LZW理論GIFデコーダー本体 ヘッダファイル Ver 1.00 */
/* for VisualStudio6.0 only */
/* ※展開用パラメータ格納構造体と関数のプロトタイプ宣言。 */
/* Copyright (C) 2000 DJ☆Uchi [H.Uchida] */
/*--------------------------------------------------------------------------------------*/
#include <windows.h>
/*--------------------------------------------------------------------------------------*/
/* GIFDECODESTATUS構造体 */
/* GIFデータ解析用構造体 */
/* ※GIFの符号化コード取得に必要な情報をまとめた物。 */
/*--------------------------------------------------------------------------------------*/
typedef struct GIFDECODESTATUS {
DWORD code_size; //コードサイズ(CS)
DWORD bit_size; //ビットサイズ(CBL)
DWORD clear_code; //クリアコード
DWORD end_code; //エンドコード
DWORD entry; //現エントリ数
DWORD bit_pt; //現ビット位置
DWORD next_block; //次ブロック開始位置
DWORD data_size; //データサイズ
} GIFDECODESTATUS;
/*--------------------------------------------------------------------------------------*/
/* RGBDECODESTATUS構造体 */
/* DIBデータ書き込み用構造体 */
/* ※DIBに画像データを書き込む際に必要な情報をまとめた物。 */
/*--------------------------------------------------------------------------------------*/
typedef struct RGBDECODESTATUS {
GIFDECODESTATUS *gs; //GIFDECODESTATUS構造体参照用ポインタ
DWORD rgb_pt; //展開データ書き込み位置(同一ライン上でのオフセット値)
DWORD rgb_offset; //展開データ書き込みオフセット(ライン数×アラインメント)
DWORD rgb_width; //DIB横pixel数
DWORD rgb_height; //DIB縦pixel数
DWORD rgb_align; //DIBアラインメント値(1ライン分のバイト数)
DWORD rgb_color; //DIBカラービット値
DWORD rgb_line; //展開データ書き込みライン(インタレース時に使用)
DWORD inter_offset; //インタレースオフセット(ライン数)
DWORD inter_flag; //インタレースフラグ
} RGBDECODESTATUS;
/*--------------------------------------------------------------------------------------*/
/* GetCode() */
/* 可変ビット長入力関数。 */
/* ※符号化コードを一つ取り出して、ビット位置をインクリメントする。 */
/* ※取り出したデータはWORDサイズの配列に一定量貯めてからデコードする。 */
/*--------------------------------------------------------------------------------------*/
DWORD GetCode(BYTE *gif, GIFDECODESTATUS *gs);
/*--------------------------------------------------------------------------------------*/
/* rgb_write() */
/* DIB画像データ書き込み関数。 */
/* ※展開された画像データをDIBとして書き込みます。 */
/*--------------------------------------------------------------------------------------*/
void rgb_write(BYTE *rgb, RGBDECODESTATUS *rs, WORD code);
/*--------------------------------------------------------------------------------------*/
/* lzw_decode() */
/* 非LZW理論展開関数(メインループ) */
/* ※WORDサイズの配列に格納された符号化コードをデコードします。 */
/*--------------------------------------------------------------------------------------*/
void lzw_decode(BYTE *rgb, WORD *lzw, RGBDECODESTATUS *rs, int x, int y);
/*--------------------------------------------------------------------------------------*/
/* lzw_char() */
/* 非LZW理論展開関数(サブ) */
/* ※非LZW理論の核。 */
/* ※指定された符号化コードに対する展開データの先頭1つを返します。 */
/*--------------------------------------------------------------------------------------*/
void lzw_char(BYTE *rgb, WORD *lzw, RGBDECODESTATUS *rs, int x);
/*--------------------------------------------------------------------------------------*/
/* lzw_string() */
/* 非LZW理論展開関数(コア) */
/* ※非LZW理論の核。 */
/* ※指定された符号化コードに対する展開データを返します。 */
/*--------------------------------------------------------------------------------------*/
void lzw_string(BYTE *rgb, WORD *lzw, RGBDECODESTATUS *rs, int x);