aboutsummaryrefslogtreecommitdiff
path: root/archive/hge/CxImage/ximapng.h
diff options
context:
space:
mode:
authorGravatar Chris Xiong <chirs241097@gmail.com> 2015-10-26 22:52:36 +0800
committerGravatar Chris Xiong <chirs241097@gmail.com> 2015-10-26 22:52:36 +0800
commit3bd383baf6a17e734329e1fc677c7e86283db772 (patch)
tree69a9148087577f797624ceb9c71323a2563d6bb4 /archive/hge/CxImage/ximapng.h
parent543e4f570be9b279ba558ca61cc02cda251af384 (diff)
downloadbullet-lab-remix-3bd383baf6a17e734329e1fc677c7e86283db772.tar.xz
Added support for relative line numbers.
Added instructions for, brk and cont. (They are still untested...) Parser code cleanup. Removed garbage output to stderr. Reorganize the repository structure. Updated BLR2 code move it into archive. Added BLR1 files.
Diffstat (limited to 'archive/hge/CxImage/ximapng.h')
-rw-r--r--archive/hge/CxImage/ximapng.h95
1 files changed, 95 insertions, 0 deletions
diff --git a/archive/hge/CxImage/ximapng.h b/archive/hge/CxImage/ximapng.h
new file mode 100644
index 0000000..262ea02
--- /dev/null
+++ b/archive/hge/CxImage/ximapng.h
@@ -0,0 +1,95 @@
+/*
+ * File: ximapng.h
+ * Purpose: PNG Image Class Loader and Writer
+ */
+/* ==========================================================
+ * CxImagePNG (c) 07/Aug/2001 Davide Pizzolato - www.xdp.it
+ * For conditions of distribution and use, see copyright notice in ximage.h
+ *
+ * Special thanks to Troels Knakkergaard for new features, enhancements and bugfixes
+ *
+ * original CImagePNG and CImageIterator implementation are:
+ * Copyright: (c) 1995, Alejandro Aguilar Sierra <asierra(at)servidor(dot)unam(dot)mx>
+ *
+ * libpng Copyright (c) 1998-2003 Glenn Randers-Pehrson
+ * ==========================================================
+ */
+#if !defined(__ximaPNG_h)
+#define __ximaPNG_h
+
+#include "ximage.h"
+
+#if CXIMAGE_SUPPORT_PNG
+
+extern "C" {
+#ifdef _LINUX
+ #undef _DLL
+ #include <png.h>
+#else
+ #include "../png/png.h"
+#endif
+}
+
+class CxImagePNG: public CxImage
+{
+public:
+ CxImagePNG(): CxImage(CXIMAGE_FORMAT_PNG) {}
+
+// bool Load(const TCHAR * imageFileName){ return CxImage::Load(imageFileName,CXIMAGE_FORMAT_PNG);}
+// bool Save(const TCHAR * imageFileName){ return CxImage::Save(imageFileName,CXIMAGE_FORMAT_PNG);}
+ bool Decode(CxFile * hFile);
+ bool Decode(FILE *hFile) { CxIOFile file(hFile); return Decode(&file); }
+
+#if CXIMAGE_SUPPORT_ENCODE
+ bool Encode(CxFile * hFile);
+ bool Encode(FILE *hFile) { CxIOFile file(hFile); return Encode(&file); }
+#endif // CXIMAGE_SUPPORT_ENCODE
+
+ enum CODEC_OPTION
+ {
+ ENCODE_INTERLACE = 0x01,
+ // Exclusive compression types : 3 bit wide field
+ ENCODE_COMPRESSION_MASK = 0x0E,
+ ENCODE_NO_COMPRESSION = 1 << 1,
+ ENCODE_BEST_SPEED = 2 << 1,
+ ENCODE_BEST_COMPRESSION = 3 << 1,
+ ENCODE_DEFAULT_COMPRESSION = 4 << 1
+ };
+
+protected:
+ void ima_png_error(png_struct *png_ptr, char *message);
+ void expand2to4bpp(uint8_t* prow);
+
+ static void PNGAPI user_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
+ {
+ CxFile* hFile = (CxFile*)png_get_io_ptr(png_ptr);
+ if (hFile == NULL || hFile->Read(data,1,length) != length) png_error(png_ptr, "Read Error");
+ }
+
+ static void PNGAPI user_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
+ {
+ CxFile* hFile = (CxFile*)png_get_io_ptr(png_ptr);
+ if (hFile == NULL || hFile->Write(data,1,length) != length) png_error(png_ptr, "Write Error");
+ }
+
+ static void PNGAPI user_flush_data(png_structp png_ptr)
+ {
+ CxFile* hFile = (CxFile*)png_get_io_ptr(png_ptr);
+ if (hFile == NULL || !hFile->Flush()) png_error(png_ptr, "Flush Error");
+ }
+
+ static void PNGAPI user_error_fn(png_structp png_ptr,png_const_charp error_msg)
+ {
+#if PNG_LIBPNG_VER > 10399
+ strncpy((char*)png_get_error_ptr(png_ptr),error_msg,255);
+ longjmp(png_jmpbuf(png_ptr), 1);
+#else
+ strncpy((char*)png_ptr->error_ptr,error_msg,255);
+ longjmp(png_ptr->jmpbuf, 1);
+#endif
+ }
+};
+
+#endif
+
+#endif