/*	
 *	clipgif.h
 *
 *	GIF Decoder
 *
 *	CLiP - Common Library for P/ECE
 *	Copyright (C) 2001-2009 Naoyuki Sawa
 *
 *	* Thu Apr 09 22:39:06 JST 2009 Naoyuki Sawa
 *	- 1st リリース。
 *	* Wed Nov 18 21:37:53 JST 2015 Naoyuki Sawa
 *	- 'extern "C" {'〜'}'で囲みました。.cppを含むWin32プロジェクトからもインクルード出来るようにするためです。
 */
#ifndef __CLIP_GIF_H__
#define __CLIP_GIF_H__

#ifdef  __cplusplus
extern "C" {
#endif//__cplusplus

/****************************************************************************
 *	
 ****************************************************************************/

/* メモリ上のGIFデータをデコードします。
 * [in]
 *	p			GIFデータの先頭アドレス。
 *	size_proc		幅・高さ通知コールバック。(NULL可)
 *	draw_proc		ピクセル描画コールバック。(NULL可)
 *	user_data		任意のユーザーデータ。
 * [note]
 *	* インターレース無し、または、インターレース有りの、どちらでもデコード可能です。
 *	* Graphic Control Extensionによる、透過色の指定が可能です。
 *	  透過色が指定されている場合、透過ピクセルに対して、draw_proc()をコールバックしません。
 *	* size_proc()へは、Logical Screen DescriptorのLogical Screen Width,Heightを通知します。
 *	* Image DescriptorのImage Left,Top Position、Image Width,Heightが、Logical Screen Width,Heightの全体でない場合、
 *	  余白のピクセルに対して、draw_proc()をコールバックしません。
 *	* 複数のイメージが含まれている場合(アニメーションGIF)、すべてのイメージについてdraw_proc()をコールバックします。
 *	  呼び出されたdraw_proc()は、第一引数のiによって、何番目(0〜N-1)のイメージかを判断してください。
 *	  もし最初のイメージだけが必要ならば、(i!=0)でのコールバックを無視してください。
 * [note]
 *	* size_proc、draw_procの使い方は、jpeg_decode()関数と同じです。
 *	  clipjpeg.hの中の、jpeg_decode()関数の説明を参照してください。
 *	* ただし、jpeg_decode()関数とは異なり、本関数は内部でリソース割当てを行っています。
 *	  draw_procの中で、setjmp,longjmpを利用して中止した場合、リソース漏れが発生します。
 *	  中止の必要がある場合は、ガーベージコレクター(clipgc.h参照)を併用してください。
 */
void gif_decode(const void* _p,
	void (*size_proc)(int w, int h, void* user_data),
	void (*draw_proc)(int i, int x, int y, int c, const unsigned char (*p)[3], void* user_data),
	void* user_data);

#ifdef  __cplusplus
}//extern "C"
#endif//__cplusplus

#endif /*__CLIP_GIF_H__*/
