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

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

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

/* メモリ上のPNGデータをデコードします。
 * [in]
 *	p			PNGデータの先頭アドレス。
 *	size_proc		幅・高さ通知コールバック。(NULL可)
 *	draw_proc		ピクセル描画コールバック。(NULL可)
 *	user_data		任意のユーザーデータ。
 * [note]
 *	* PNG Specification 1.0 に定義されている、すべてのカラー形式がデコード可能です。
 *	    Color type 0 (grayscale)                    Bit Depths 1,2,4,8,16
 *	    Color type 2 (truecolor)                    Bit Depths       8,16
 *	    Color type 3 (indexed color)                Bit Depths 1,2,4,8   
 *	    Color type 4 (grayscale with alpha channel) Bit Depths       8,16
 *	    Color type 6 (truecolor with alpha channel) Bit Depths       8,16
 *	* インターレース無し、または、インターレース有りの、どちらでもデコード可能です。
 *	* tRNSチャンクによる、透過色、または、インデックスカラーの透過率が指定可能です。
 * [note]
 *	* size_proc、draw_procの使い方は、jpeg_decode()関数と同じです。
 *	  clipjpeg.hの中の、jpeg_decode()関数の説明を参照してください。
 *	* ただし、jpeg_decode()関数とは異なり、本関数は内部でリソース割当てを行っています。
 *	  draw_procの中で、setjmp,longjmpを利用して中止した場合、リソース漏れが発生します。
 *	  中止の必要がある場合は、ガーベージコレクター(clipgc.h参照)を併用してください。
 */
void png_decode(const void* _p,
	void (*size_proc)(int w, int h, void* user_data),
	void (*draw_proc)(int x, int y, int r, int g, int b, int a, void* user_data),
	void* user_data);

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

#endif /*__CLIP_PNG_H__*/
