739 lines
		
	
	
	
		
			35 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			739 lines
		
	
	
	
		
			35 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/* stb_image - v2.26 - public domain image loader - http://nothings.org/stb
							 | 
						||
| 
								 | 
							
								                                  no warranty implied; use at your own risk
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   Do this:
							 | 
						||
| 
								 | 
							
								      #define STB_IMAGE_IMPLEMENTATION
							 | 
						||
| 
								 | 
							
								   before you include this file in *one* C or C++ file to create the implementation.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   // i.e. it should look like this:
							 | 
						||
| 
								 | 
							
								   #include ...
							 | 
						||
| 
								 | 
							
								   #include ...
							 | 
						||
| 
								 | 
							
								   #include ...
							 | 
						||
| 
								 | 
							
								   #define STB_IMAGE_IMPLEMENTATION
							 | 
						||
| 
								 | 
							
								   #include "stb_image.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   You can #define STBI_ASSERT(x) before the #include to avoid using assert.h.
							 | 
						||
| 
								 | 
							
								   And #define STBI_MALLOC, STBI_REALLOC, and STBI_FREE to avoid using malloc,realloc,free
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   QUICK NOTES:
							 | 
						||
| 
								 | 
							
								      Primarily of interest to game developers and other people who can
							 | 
						||
| 
								 | 
							
								          avoid problematic images and only need the trivial interface
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      JPEG baseline & progressive (12 bpc/arithmetic not supported, same as stock IJG lib)
							 | 
						||
| 
								 | 
							
								      PNG 1/2/4/8/16-bit-per-channel
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      TGA (not sure what subset, if a subset)
							 | 
						||
| 
								 | 
							
								      BMP non-1bpp, non-RLE
							 | 
						||
| 
								 | 
							
								      PSD (composited view only, no extra channels, 8/16 bit-per-channel)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      GIF (*comp always reports as 4-channel)
							 | 
						||
| 
								 | 
							
								      HDR (radiance rgbE format)
							 | 
						||
| 
								 | 
							
								      PIC (Softimage PIC)
							 | 
						||
| 
								 | 
							
								      PNM (PPM and PGM binary only)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      Animated GIF still needs a proper API, but here's one way to do it:
							 | 
						||
| 
								 | 
							
								          http://gist.github.com/urraka/685d9a6340b26b830d49
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      - decode from memory or through FILE (define STBI_NO_STDIO to remove code)
							 | 
						||
| 
								 | 
							
								      - decode from arbitrary I/O callbacks
							 | 
						||
| 
								 | 
							
								      - SIMD acceleration on x86/x64 (SSE2) and ARM (NEON)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   Full documentation under "DOCUMENTATION" below.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								LICENSE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  See end of file for license information.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								RECENT REVISION HISTORY:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      2.26  (2020-07-13) many minor fixes
							 | 
						||
| 
								 | 
							
								      2.25  (2020-02-02) fix warnings
							 | 
						||
| 
								 | 
							
								      2.24  (2020-02-02) fix warnings; thread-local failure_reason and flip_vertically
							 | 
						||
| 
								 | 
							
								      2.23  (2019-08-11) fix clang static analysis warning
							 | 
						||
| 
								 | 
							
								      2.22  (2019-03-04) gif fixes, fix warnings
							 | 
						||
| 
								 | 
							
								      2.21  (2019-02-25) fix typo in comment
							 | 
						||
| 
								 | 
							
								      2.20  (2019-02-07) support utf8 filenames in Windows; fix warnings and platform ifdefs
							 | 
						||
| 
								 | 
							
								      2.19  (2018-02-11) fix warning
							 | 
						||
| 
								 | 
							
								      2.18  (2018-01-30) fix warnings
							 | 
						||
| 
								 | 
							
								      2.17  (2018-01-29) bugfix, 1-bit BMP, 16-bitness query, fix warnings
							 | 
						||
| 
								 | 
							
								      2.16  (2017-07-23) all functions have 16-bit variants; optimizations; bugfixes
							 | 
						||
| 
								 | 
							
								      2.15  (2017-03-18) fix png-1,2,4; all Imagenet JPGs; no runtime SSE detection on GCC
							 | 
						||
| 
								 | 
							
								      2.14  (2017-03-03) remove deprecated STBI_JPEG_OLD; fixes for Imagenet JPGs
							 | 
						||
| 
								 | 
							
								      2.13  (2016-12-04) experimental 16-bit API, only for PNG so far; fixes
							 | 
						||
| 
								 | 
							
								      2.12  (2016-04-02) fix typo in 2.11 PSD fix that caused crashes
							 | 
						||
| 
								 | 
							
								      2.11  (2016-04-02) 16-bit PNGS; enable SSE2 in non-gcc x64
							 | 
						||
| 
								 | 
							
								                         RGB-format JPEG; remove white matting in PSD;
							 | 
						||
| 
								 | 
							
								                         allocate large structures on the stack;
							 | 
						||
| 
								 | 
							
								                         correct channel count for PNG & BMP
							 | 
						||
| 
								 | 
							
								      2.10  (2016-01-22) avoid warning introduced in 2.09
							 | 
						||
| 
								 | 
							
								      2.09  (2016-01-16) 16-bit TGA; comments in PNM files; STBI_REALLOC_SIZED
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   See end of file for full revision history.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 ============================    Contributors    =========================
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 Image formats                          Extensions, features
							 | 
						||
| 
								 | 
							
								    Sean Barrett (jpeg, png, bmp)          Jetro Lauha (stbi_info)
							 | 
						||
| 
								 | 
							
								    Nicolas Schulz (hdr, psd)              Martin "SpartanJ" Golini (stbi_info)
							 | 
						||
| 
								 | 
							
								    Jonathan Dummer (tga)                  James "moose2000" Brown (iPhone PNG)
							 | 
						||
| 
								 | 
							
								    Jean-Marc Lienher (gif)                Ben "Disch" Wenger (io callbacks)
							 | 
						||
| 
								 | 
							
								    Tom Seddon (pic)                       Omar Cornut (1/2/4-bit PNG)
							 | 
						||
| 
								 | 
							
								    Thatcher Ulrich (psd)                  Nicolas Guillemot (vertical flip)
							 | 
						||
| 
								 | 
							
								    Ken Miller (pgm, ppm)                  Richard Mitton (16-bit PSD)
							 | 
						||
| 
								 | 
							
								    github:urraka (animated gif)           Junggon Kim (PNM comments)
							 | 
						||
| 
								 | 
							
								    Christopher Forseth (animated gif)     Daniel Gibson (16-bit TGA)
							 | 
						||
| 
								 | 
							
								                                           socks-the-fox (16-bit PNG)
							 | 
						||
| 
								 | 
							
								                                           Jeremy Sawicki (handle all ImageNet JPGs)
							 | 
						||
| 
								 | 
							
								 Optimizations & bugfixes                  Mikhail Morozov (1-bit BMP)
							 | 
						||
| 
								 | 
							
								    Fabian "ryg" Giesen                    Anael Seghezzi (is-16-bit query)
							 | 
						||
| 
								 | 
							
								    Arseny Kapoulkine
							 | 
						||
| 
								 | 
							
								    John-Mark Allen
							 | 
						||
| 
								 | 
							
								    Carmelo J Fdez-Aguera
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 Bug & warning fixes
							 | 
						||
| 
								 | 
							
								    Marc LeBlanc            David Woo          Guillaume George     Martins Mozeiko
							 | 
						||
| 
								 | 
							
								    Christpher Lloyd        Jerry Jansson      Joseph Thomson       Blazej Dariusz Roszkowski
							 | 
						||
| 
								 | 
							
								    Phil Jordan                                Dave Moore           Roy Eltham
							 | 
						||
| 
								 | 
							
								    Hayaki Saito            Nathan Reed        Won Chun
							 | 
						||
| 
								 | 
							
								    Luke Graham             Johan Duparc       Nick Verigakis       the Horde3D community
							 | 
						||
| 
								 | 
							
								    Thomas Ruf              Ronny Chevalier                         github:rlyeh
							 | 
						||
| 
								 | 
							
								    Janez Zemva             John Bartholomew   Michal Cichon        github:romigrou
							 | 
						||
| 
								 | 
							
								    Jonathan Blow           Ken Hamada         Tero Hanninen        github:svdijk
							 | 
						||
| 
								 | 
							
								                            Laurent Gomila     Cort Stratton        github:snagar
							 | 
						||
| 
								 | 
							
								    Aruelien Pocheville     Sergio Gonzalez    Thibault Reuille     github:Zelex
							 | 
						||
| 
								 | 
							
								    Cass Everitt            Ryamond Barbiero                        github:grim210
							 | 
						||
| 
								 | 
							
								    Paul Du Bois            Engin Manap        Aldo Culquicondor    github:sammyhw
							 | 
						||
| 
								 | 
							
								    Philipp Wiesemann       Dale Weiler        Oriol Ferrer Mesia   github:phprus
							 | 
						||
| 
								 | 
							
								    Josh Tobin                                 Matthew Gregan       github:poppolopoppo
							 | 
						||
| 
								 | 
							
								    Julian Raschke          Gregory Mullen     Christian Floisand   github:darealshinji
							 | 
						||
| 
								 | 
							
								    Baldur Karlsson         Kevin Schmidt      JR Smith             github:Michaelangel007
							 | 
						||
| 
								 | 
							
								                            Brad Weinberger    Matvey Cherevko      [reserved]
							 | 
						||
| 
								 | 
							
								    Luca Sas                Alexander Veselov  Zack Middleton       [reserved]
							 | 
						||
| 
								 | 
							
								    Ryan C. Gordon          [reserved]                              [reserved]
							 | 
						||
| 
								 | 
							
								                     DO NOT ADD YOUR NAME HERE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  To add your name to the credits, pick a random blank space in the middle and fill it.
							 | 
						||
| 
								 | 
							
								  80% of merge conflicts on stb PRs are due to people adding their name at the end
							 | 
						||
| 
								 | 
							
								  of the credits.
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef STBI_INCLUDE_STB_IMAGE_H
							 | 
						||
| 
								 | 
							
								#define STBI_INCLUDE_STB_IMAGE_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// DOCUMENTATION
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Limitations:
							 | 
						||
| 
								 | 
							
								//    - no 12-bit-per-channel JPEG
							 | 
						||
| 
								 | 
							
								//    - no JPEGs with arithmetic coding
							 | 
						||
| 
								 | 
							
								//    - GIF always returns *comp=4
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Basic usage (see HDR discussion below for HDR usage):
							 | 
						||
| 
								 | 
							
								//    int x,y,n;
							 | 
						||
| 
								 | 
							
								//    unsigned char *data = stbi_load(filename, &x, &y, &n, 0);
							 | 
						||
| 
								 | 
							
								//    // ... process data if not NULL ...
							 | 
						||
| 
								 | 
							
								//    // ... x = width, y = height, n = # 8-bit components per pixel ...
							 | 
						||
| 
								 | 
							
								//    // ... replace '0' with '1'..'4' to force that many components per pixel
							 | 
						||
| 
								 | 
							
								//    // ... but 'n' will always be the number that it would have been if you said 0
							 | 
						||
| 
								 | 
							
								//    stbi_image_free(data)
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Standard parameters:
							 | 
						||
| 
								 | 
							
								//    int *x                 -- outputs image width in pixels
							 | 
						||
| 
								 | 
							
								//    int *y                 -- outputs image height in pixels
							 | 
						||
| 
								 | 
							
								//    int *channels_in_file  -- outputs # of image components in image file
							 | 
						||
| 
								 | 
							
								//    int desired_channels   -- if non-zero, # of image components requested in result
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// The return value from an image loader is an 'unsigned char *' which points
							 | 
						||
| 
								 | 
							
								// to the pixel data, or NULL on an allocation failure or if the image is
							 | 
						||
| 
								 | 
							
								// corrupt or invalid. The pixel data consists of *y scanlines of *x pixels,
							 | 
						||
| 
								 | 
							
								// with each pixel consisting of N interleaved 8-bit components; the first
							 | 
						||
| 
								 | 
							
								// pixel pointed to is top-left-most in the image. There is no padding between
							 | 
						||
| 
								 | 
							
								// image scanlines or between pixels, regardless of format. The number of
							 | 
						||
| 
								 | 
							
								// components N is 'desired_channels' if desired_channels is non-zero, or
							 | 
						||
| 
								 | 
							
								// *channels_in_file otherwise. If desired_channels is non-zero,
							 | 
						||
| 
								 | 
							
								// *channels_in_file has the number of components that _would_ have been
							 | 
						||
| 
								 | 
							
								// output otherwise. E.g. if you set desired_channels to 4, you will always
							 | 
						||
| 
								 | 
							
								// get RGBA output, but you can check *channels_in_file to see if it's trivially
							 | 
						||
| 
								 | 
							
								// opaque because e.g. there were only 3 channels in the source image.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// An output image with N components has the following components interleaved
							 | 
						||
| 
								 | 
							
								// in this order in each pixel:
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//     N=#comp     components
							 | 
						||
| 
								 | 
							
								//       1           grey
							 | 
						||
| 
								 | 
							
								//       2           grey, alpha
							 | 
						||
| 
								 | 
							
								//       3           red, green, blue
							 | 
						||
| 
								 | 
							
								//       4           red, green, blue, alpha
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// If image loading fails for any reason, the return value will be NULL,
							 | 
						||
| 
								 | 
							
								// and *x, *y, *channels_in_file will be unchanged. The function
							 | 
						||
| 
								 | 
							
								// stbi_failure_reason() can be queried for an extremely brief, end-user
							 | 
						||
| 
								 | 
							
								// unfriendly explanation of why the load failed. Define STBI_NO_FAILURE_STRINGS
							 | 
						||
| 
								 | 
							
								// to avoid compiling these strings at all, and STBI_FAILURE_USERMSG to get slightly
							 | 
						||
| 
								 | 
							
								// more user-friendly ones.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Paletted PNG, BMP, GIF, and PIC images are automatically depalettized.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// ===========================================================================
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// UNICODE:
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//   If compiling for Windows and you wish to use Unicode filenames, compile
							 | 
						||
| 
								 | 
							
								//   with
							 | 
						||
| 
								 | 
							
								//       #define STBI_WINDOWS_UTF8
							 | 
						||
| 
								 | 
							
								//   and pass utf8-encoded filenames. Call stbi_convert_wchar_to_utf8 to convert
							 | 
						||
| 
								 | 
							
								//   Windows wchar_t filenames to utf8.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// ===========================================================================
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Philosophy
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// stb libraries are designed with the following priorities:
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//    1. easy to use
							 | 
						||
| 
								 | 
							
								//    2. easy to maintain
							 | 
						||
| 
								 | 
							
								//    3. good performance
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Sometimes I let "good performance" creep up in priority over "easy to maintain",
							 | 
						||
| 
								 | 
							
								// and for best performance I may provide less-easy-to-use APIs that give higher
							 | 
						||
| 
								 | 
							
								// performance, in addition to the easy-to-use ones. Nevertheless, it's important
							 | 
						||
| 
								 | 
							
								// to keep in mind that from the standpoint of you, a client of this library,
							 | 
						||
| 
								 | 
							
								// all you care about is #1 and #3, and stb libraries DO NOT emphasize #3 above all.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Some secondary priorities arise directly from the first two, some of which
							 | 
						||
| 
								 | 
							
								// provide more explicit reasons why performance can't be emphasized.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//    - Portable ("ease of use")
							 | 
						||
| 
								 | 
							
								//    - Small source code footprint ("easy to maintain")
							 | 
						||
| 
								 | 
							
								//    - No dependencies ("ease of use")
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// ===========================================================================
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// I/O callbacks
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// I/O callbacks allow you to read from arbitrary sources, like packaged
							 | 
						||
| 
								 | 
							
								// files or some other source. Data read from callbacks are processed
							 | 
						||
| 
								 | 
							
								// through a small internal buffer (currently 128 bytes) to try to reduce
							 | 
						||
| 
								 | 
							
								// overhead.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// The three functions you must define are "read" (reads some bytes of data),
							 | 
						||
| 
								 | 
							
								// "skip" (skips some bytes of data), "eof" (reports if the stream is at the end).
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// ===========================================================================
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// SIMD support
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// The JPEG decoder will try to automatically use SIMD kernels on x86 when
							 | 
						||
| 
								 | 
							
								// supported by the compiler. For ARM Neon support, you must explicitly
							 | 
						||
| 
								 | 
							
								// request it.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// (The old do-it-yourself SIMD API is no longer supported in the current
							 | 
						||
| 
								 | 
							
								// code.)
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// On x86, SSE2 will automatically be used when available based on a run-time
							 | 
						||
| 
								 | 
							
								// test; if not, the generic C versions are used as a fall-back. On ARM targets,
							 | 
						||
| 
								 | 
							
								// the typical path is to have separate builds for NEON and non-NEON devices
							 | 
						||
| 
								 | 
							
								// (at least this is true for iOS and Android). Therefore, the NEON support is
							 | 
						||
| 
								 | 
							
								// toggled by a build flag: define STBI_NEON to get NEON loops.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// If for some reason you do not want to use any of SIMD code, or if
							 | 
						||
| 
								 | 
							
								// you have issues compiling it, you can disable it entirely by
							 | 
						||
| 
								 | 
							
								// defining STBI_NO_SIMD.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// ===========================================================================
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// HDR image support   (disable by defining STBI_NO_HDR)
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// stb_image supports loading HDR images in general, and currently the Radiance
							 | 
						||
| 
								 | 
							
								// .HDR file format specifically. You can still load any file through the existing
							 | 
						||
| 
								 | 
							
								// interface; if you attempt to load an HDR file, it will be automatically remapped
							 | 
						||
| 
								 | 
							
								// to LDR, assuming gamma 2.2 and an arbitrary scale factor defaulting to 1;
							 | 
						||
| 
								 | 
							
								// both of these constants can be reconfigured through this interface:
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//     stbi_hdr_to_ldr_gamma(2.2f);
							 | 
						||
| 
								 | 
							
								//     stbi_hdr_to_ldr_scale(1.0f);
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// (note, do not use _inverse_ constants; stbi_image will invert them
							 | 
						||
| 
								 | 
							
								// appropriately).
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Additionally, there is a new, parallel interface for loading files as
							 | 
						||
| 
								 | 
							
								// (linear) floats to preserve the full dynamic range:
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//    float *data = stbi_loadf(filename, &x, &y, &n, 0);
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// If you load LDR images through this interface, those images will
							 | 
						||
| 
								 | 
							
								// be promoted to floating point values, run through the inverse of
							 | 
						||
| 
								 | 
							
								// constants corresponding to the above:
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//     stbi_ldr_to_hdr_scale(1.0f);
							 | 
						||
| 
								 | 
							
								//     stbi_ldr_to_hdr_gamma(2.2f);
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Finally, given a filename (or an open file or memory block--see header
							 | 
						||
| 
								 | 
							
								// file for details) containing image data, you can query for the "most
							 | 
						||
| 
								 | 
							
								// appropriate" interface to use (that is, whether the image is HDR or
							 | 
						||
| 
								 | 
							
								// not), using:
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//     stbi_is_hdr(char *filename);
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// ===========================================================================
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// iPhone PNG support:
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// By default we convert iphone-formatted PNGs back to RGB, even though
							 | 
						||
| 
								 | 
							
								// they are internally encoded differently. You can disable this conversion
							 | 
						||
| 
								 | 
							
								// by calling stbi_convert_iphone_png_to_rgb(0), in which case
							 | 
						||
| 
								 | 
							
								// you will always just get the native iphone "format" through (which
							 | 
						||
| 
								 | 
							
								// is BGR stored in RGB).
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Call stbi_set_unpremultiply_on_load(1) as well to force a divide per
							 | 
						||
| 
								 | 
							
								// pixel to remove any premultiplied alpha *only* if the image file explicitly
							 | 
						||
| 
								 | 
							
								// says there's premultiplied data (currently only happens in iPhone images,
							 | 
						||
| 
								 | 
							
								// and only if iPhone convert-to-rgb processing is on).
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// ===========================================================================
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// ADDITIONAL CONFIGURATION
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//  - You can suppress implementation of any of the decoders to reduce
							 | 
						||
| 
								 | 
							
								//    your code footprint by #defining one or more of the following
							 | 
						||
| 
								 | 
							
								//    symbols before creating the implementation.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//        STBI_NO_JPEG
							 | 
						||
| 
								 | 
							
								//        STBI_NO_PNG
							 | 
						||
| 
								 | 
							
								//        STBI_NO_BMP
							 | 
						||
| 
								 | 
							
								//        STBI_NO_PSD
							 | 
						||
| 
								 | 
							
								//        STBI_NO_TGA
							 | 
						||
| 
								 | 
							
								//        STBI_NO_GIF
							 | 
						||
| 
								 | 
							
								//        STBI_NO_HDR
							 | 
						||
| 
								 | 
							
								//        STBI_NO_PIC
							 | 
						||
| 
								 | 
							
								//        STBI_NO_PNM   (.ppm and .pgm)
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//  - You can request *only* certain decoders and suppress all other ones
							 | 
						||
| 
								 | 
							
								//    (this will be more forward-compatible, as addition of new decoders
							 | 
						||
| 
								 | 
							
								//    doesn't require you to disable them explicitly):
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//        STBI_ONLY_JPEG
							 | 
						||
| 
								 | 
							
								//        STBI_ONLY_PNG
							 | 
						||
| 
								 | 
							
								//        STBI_ONLY_BMP
							 | 
						||
| 
								 | 
							
								//        STBI_ONLY_PSD
							 | 
						||
| 
								 | 
							
								//        STBI_ONLY_TGA
							 | 
						||
| 
								 | 
							
								//        STBI_ONLY_GIF
							 | 
						||
| 
								 | 
							
								//        STBI_ONLY_HDR
							 | 
						||
| 
								 | 
							
								//        STBI_ONLY_PIC
							 | 
						||
| 
								 | 
							
								//        STBI_ONLY_PNM   (.ppm and .pgm)
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//   - If you use STBI_NO_PNG (or _ONLY_ without PNG), and you still
							 | 
						||
| 
								 | 
							
								//     want the zlib decoder to be available, #define STBI_SUPPORT_ZLIB
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//  - If you define STBI_MAX_DIMENSIONS, stb_image will reject images greater
							 | 
						||
| 
								 | 
							
								//    than that size (in either width or height) without further processing.
							 | 
						||
| 
								 | 
							
								//    This is to let programs in the wild set an upper bound to prevent
							 | 
						||
| 
								 | 
							
								//    denial-of-service attacks on untrusted data, as one could generate a
							 | 
						||
| 
								 | 
							
								//    valid image of gigantic dimensions and force stb_image to allocate a
							 | 
						||
| 
								 | 
							
								//    huge block of memory and spend disproportionate time decoding it. By
							 | 
						||
| 
								 | 
							
								//    default this is set to (1 << 24), which is 16777216, but that's still
							 | 
						||
| 
								 | 
							
								//    very big.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef STBI_NO_STDIO
							 | 
						||
| 
								 | 
							
								#include <stdio.h>
							 | 
						||
| 
								 | 
							
								#endif // STBI_NO_STDIO
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define STBI_VERSION 1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								enum
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    STBI_default = 0, // only used for desired_channels
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    STBI_grey = 1,
							 | 
						||
| 
								 | 
							
								    STBI_grey_alpha = 2,
							 | 
						||
| 
								 | 
							
								    STBI_rgb = 3,
							 | 
						||
| 
								 | 
							
								    STBI_rgb_alpha = 4
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <stdlib.h>
							 | 
						||
| 
								 | 
							
								typedef unsigned char stbi_uc;
							 | 
						||
| 
								 | 
							
								typedef unsigned short stbi_us;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								extern "C" {
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef STBIDEF
							 | 
						||
| 
								 | 
							
								#ifdef STB_IMAGE_STATIC
							 | 
						||
| 
								 | 
							
								#define STBIDEF static
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								#define STBIDEF extern
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    //////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								    //
							 | 
						||
| 
								 | 
							
								    // PRIMARY API - works on images of any type
							 | 
						||
| 
								 | 
							
								    //
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    //
							 | 
						||
| 
								 | 
							
								    // load image by filename, open file, or memory buffer
							 | 
						||
| 
								 | 
							
								    //
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    typedef struct
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        int      (*read)  (void* user, char* data, int size);   // fill 'data' with 'size' bytes.  return number of bytes actually read
							 | 
						||
| 
								 | 
							
								        void     (*skip)  (void* user, int n);                 // skip the next 'n' bytes, or 'unget' the last -n bytes if negative
							 | 
						||
| 
								 | 
							
								        int      (*eof)   (void* user);                       // returns nonzero if we are at end of file/data
							 | 
						||
| 
								 | 
							
								    } stbi_io_callbacks;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    ////////////////////////////////////
							 | 
						||
| 
								 | 
							
								    //
							 | 
						||
| 
								 | 
							
								    // 8-bits-per-channel interface
							 | 
						||
| 
								 | 
							
								    //
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    STBIDEF stbi_uc* stbi_load_from_memory(stbi_uc           const* buffer, int len, int* x, int* y, int* channels_in_file, int desired_channels);
							 | 
						||
| 
								 | 
							
								    STBIDEF stbi_uc* stbi_load_from_callbacks(stbi_io_callbacks const* clbk, void* user, int* x, int* y, int* channels_in_file, int desired_channels);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef STBI_NO_STDIO
							 | 
						||
| 
								 | 
							
								    STBIDEF stbi_uc* stbi_load(char const* filename, int* x, int* y, int* channels_in_file, int desired_channels);
							 | 
						||
| 
								 | 
							
								    STBIDEF stbi_uc* stbi_load_from_file(FILE* f, int* x, int* y, int* channels_in_file, int desired_channels);
							 | 
						||
| 
								 | 
							
								    // for stbi_load_from_file, file pointer is left pointing immediately after image
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef STBI_NO_GIF
							 | 
						||
| 
								 | 
							
								    STBIDEF stbi_uc* stbi_load_gif_from_memory(stbi_uc const* buffer, int len, int** delays, int* x, int* y, int* z, int* comp, int req_comp);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef STBI_WINDOWS_UTF8
							 | 
						||
| 
								 | 
							
								    STBIDEF int stbi_convert_wchar_to_utf8(char* buffer, size_t bufferlen, const wchar_t* input);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    ////////////////////////////////////
							 | 
						||
| 
								 | 
							
								    //
							 | 
						||
| 
								 | 
							
								    // 16-bits-per-channel interface
							 | 
						||
| 
								 | 
							
								    //
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    STBIDEF stbi_us* stbi_load_16_from_memory(stbi_uc const* buffer, int len, int* x, int* y, int* channels_in_file, int desired_channels);
							 | 
						||
| 
								 | 
							
								    STBIDEF stbi_us* stbi_load_16_from_callbacks(stbi_io_callbacks const* clbk, void* user, int* x, int* y, int* channels_in_file, int desired_channels);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef STBI_NO_STDIO
							 | 
						||
| 
								 | 
							
								    STBIDEF stbi_us* stbi_load_16(char const* filename, int* x, int* y, int* channels_in_file, int desired_channels);
							 | 
						||
| 
								 | 
							
								    STBIDEF stbi_us* stbi_load_from_file_16(FILE* f, int* x, int* y, int* channels_in_file, int desired_channels);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    ////////////////////////////////////
							 | 
						||
| 
								 | 
							
								    //
							 | 
						||
| 
								 | 
							
								    // float-per-channel interface
							 | 
						||
| 
								 | 
							
								    //
							 | 
						||
| 
								 | 
							
								#ifndef STBI_NO_LINEAR
							 | 
						||
| 
								 | 
							
								    STBIDEF float* stbi_loadf_from_memory(stbi_uc const* buffer, int len, int* x, int* y, int* channels_in_file, int desired_channels);
							 | 
						||
| 
								 | 
							
								    STBIDEF float* stbi_loadf_from_callbacks(stbi_io_callbacks const* clbk, void* user, int* x, int* y, int* channels_in_file, int desired_channels);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef STBI_NO_STDIO
							 | 
						||
| 
								 | 
							
								    STBIDEF float* stbi_loadf(char const* filename, int* x, int* y, int* channels_in_file, int desired_channels);
							 | 
						||
| 
								 | 
							
								    STBIDEF float* stbi_loadf_from_file(FILE* f, int* x, int* y, int* channels_in_file, int desired_channels);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef STBI_NO_HDR
							 | 
						||
| 
								 | 
							
								    STBIDEF void   stbi_hdr_to_ldr_gamma(float gamma);
							 | 
						||
| 
								 | 
							
								    STBIDEF void   stbi_hdr_to_ldr_scale(float scale);
							 | 
						||
| 
								 | 
							
								#endif // STBI_NO_HDR
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef STBI_NO_LINEAR
							 | 
						||
| 
								 | 
							
								    STBIDEF void   stbi_ldr_to_hdr_gamma(float gamma);
							 | 
						||
| 
								 | 
							
								    STBIDEF void   stbi_ldr_to_hdr_scale(float scale);
							 | 
						||
| 
								 | 
							
								#endif // STBI_NO_LINEAR
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // stbi_is_hdr is always defined, but always returns false if STBI_NO_HDR
							 | 
						||
| 
								 | 
							
								    STBIDEF int    stbi_is_hdr_from_callbacks(stbi_io_callbacks const* clbk, void* user);
							 | 
						||
| 
								 | 
							
								    STBIDEF int    stbi_is_hdr_from_memory(stbi_uc const* buffer, int len);
							 | 
						||
| 
								 | 
							
								#ifndef STBI_NO_STDIO
							 | 
						||
| 
								 | 
							
								    STBIDEF int      stbi_is_hdr(char const* filename);
							 | 
						||
| 
								 | 
							
								    STBIDEF int      stbi_is_hdr_from_file(FILE* f);
							 | 
						||
| 
								 | 
							
								#endif // STBI_NO_STDIO
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // get a VERY brief reason for failure
							 | 
						||
| 
								 | 
							
								    // on most compilers (and ALL modern mainstream compilers) this is threadsafe
							 | 
						||
| 
								 | 
							
								    STBIDEF const char* stbi_failure_reason(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // free the loaded image -- this is just free()
							 | 
						||
| 
								 | 
							
								    STBIDEF void     stbi_image_free(void* retval_from_stbi_load);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // get image dimensions & components without fully decoding
							 | 
						||
| 
								 | 
							
								    STBIDEF int      stbi_info_from_memory(stbi_uc const* buffer, int len, int* x, int* y, int* comp);
							 | 
						||
| 
								 | 
							
								    STBIDEF int      stbi_info_from_callbacks(stbi_io_callbacks const* clbk, void* user, int* x, int* y, int* comp);
							 | 
						||
| 
								 | 
							
								    STBIDEF int      stbi_is_16_bit_from_memory(stbi_uc const* buffer, int len);
							 | 
						||
| 
								 | 
							
								    STBIDEF int      stbi_is_16_bit_from_callbacks(stbi_io_callbacks const* clbk, void* user);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef STBI_NO_STDIO
							 | 
						||
| 
								 | 
							
								    STBIDEF int      stbi_info(char const* filename, int* x, int* y, int* comp);
							 | 
						||
| 
								 | 
							
								    STBIDEF int      stbi_info_from_file(FILE* f, int* x, int* y, int* comp);
							 | 
						||
| 
								 | 
							
								    STBIDEF int      stbi_is_16_bit(char const* filename);
							 | 
						||
| 
								 | 
							
								    STBIDEF int      stbi_is_16_bit_from_file(FILE* f);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // for image formats that explicitly notate that they have premultiplied alpha,
							 | 
						||
| 
								 | 
							
								    // we just return the colors as stored in the file. set this flag to force
							 | 
						||
| 
								 | 
							
								    // unpremultiplication. results are undefined if the unpremultiply overflow.
							 | 
						||
| 
								 | 
							
								    STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // indicate whether we should process iphone images back to canonical format,
							 | 
						||
| 
								 | 
							
								    // or just pass them through "as-is"
							 | 
						||
| 
								 | 
							
								    STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // flip the image vertically, so the first pixel in the output array is the bottom left
							 | 
						||
| 
								 | 
							
								    STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // as above, but only applies to images loaded on the thread that calls the function
							 | 
						||
| 
								 | 
							
								    // this function is only available if your compiler supports thread-local variables;
							 | 
						||
| 
								 | 
							
								    // calling it will fail to link if your compiler doesn't
							 | 
						||
| 
								 | 
							
								    STBIDEF void stbi_set_flip_vertically_on_load_thread(int flag_true_if_should_flip);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // ZLIB client - used by PNG, available for other purposes
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    STBIDEF char* stbi_zlib_decode_malloc_guesssize(const char* buffer, int len, int initial_size, int* outlen);
							 | 
						||
| 
								 | 
							
								    STBIDEF char* stbi_zlib_decode_malloc_guesssize_headerflag(const char* buffer, int len, int initial_size, int* outlen, int parse_header);
							 | 
						||
| 
								 | 
							
								    STBIDEF char* stbi_zlib_decode_malloc(const char* buffer, int len, int* outlen);
							 | 
						||
| 
								 | 
							
								    STBIDEF int   stbi_zlib_decode_buffer(char* obuffer, int olen, const char* ibuffer, int ilen);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    STBIDEF char* stbi_zlib_decode_noheader_malloc(const char* buffer, int len, int* outlen);
							 | 
						||
| 
								 | 
							
								    STBIDEF int   stbi_zlib_decode_noheader_buffer(char* obuffer, int olen, const char* ibuffer, int ilen);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								////   end header file   /////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								#endif // STBI_INCLUDE_STB_IMAGE_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								   revision history:
							 | 
						||
| 
								 | 
							
								      2.20  (2019-02-07) support utf8 filenames in Windows; fix warnings and platform ifdefs
							 | 
						||
| 
								 | 
							
								      2.19  (2018-02-11) fix warning
							 | 
						||
| 
								 | 
							
								      2.18  (2018-01-30) fix warnings
							 | 
						||
| 
								 | 
							
								      2.17  (2018-01-29) change sbti__shiftsigned to avoid clang -O2 bug
							 | 
						||
| 
								 | 
							
								                         1-bit BMP
							 | 
						||
| 
								 | 
							
								                         *_is_16_bit api
							 | 
						||
| 
								 | 
							
								                         avoid warnings
							 | 
						||
| 
								 | 
							
								      2.16  (2017-07-23) all functions have 16-bit variants;
							 | 
						||
| 
								 | 
							
								                         STBI_NO_STDIO works again;
							 | 
						||
| 
								 | 
							
								                         compilation fixes;
							 | 
						||
| 
								 | 
							
								                         fix rounding in unpremultiply;
							 | 
						||
| 
								 | 
							
								                         optimize vertical flip;
							 | 
						||
| 
								 | 
							
								                         disable raw_len validation;
							 | 
						||
| 
								 | 
							
								                         documentation fixes
							 | 
						||
| 
								 | 
							
								      2.15  (2017-03-18) fix png-1,2,4 bug; now all Imagenet JPGs decode;
							 | 
						||
| 
								 | 
							
								                         warning fixes; disable run-time SSE detection on gcc;
							 | 
						||
| 
								 | 
							
								                         uniform handling of optional "return" values;
							 | 
						||
| 
								 | 
							
								                         thread-safe initialization of zlib tables
							 | 
						||
| 
								 | 
							
								      2.14  (2017-03-03) remove deprecated STBI_JPEG_OLD; fixes for Imagenet JPGs
							 | 
						||
| 
								 | 
							
								      2.13  (2016-11-29) add 16-bit API, only supported for PNG right now
							 | 
						||
| 
								 | 
							
								      2.12  (2016-04-02) fix typo in 2.11 PSD fix that caused crashes
							 | 
						||
| 
								 | 
							
								      2.11  (2016-04-02) allocate large structures on the stack
							 | 
						||
| 
								 | 
							
								                         remove white matting for transparent PSD
							 | 
						||
| 
								 | 
							
								                         fix reported channel count for PNG & BMP
							 | 
						||
| 
								 | 
							
								                         re-enable SSE2 in non-gcc 64-bit
							 | 
						||
| 
								 | 
							
								                         support RGB-formatted JPEG
							 | 
						||
| 
								 | 
							
								                         read 16-bit PNGs (only as 8-bit)
							 | 
						||
| 
								 | 
							
								      2.10  (2016-01-22) avoid warning introduced in 2.09 by STBI_REALLOC_SIZED
							 | 
						||
| 
								 | 
							
								      2.09  (2016-01-16) allow comments in PNM files
							 | 
						||
| 
								 | 
							
								                         16-bit-per-pixel TGA (not bit-per-component)
							 | 
						||
| 
								 | 
							
								                         info() for TGA could break due to .hdr handling
							 | 
						||
| 
								 | 
							
								                         info() for BMP to shares code instead of sloppy parse
							 | 
						||
| 
								 | 
							
								                         can use STBI_REALLOC_SIZED if allocator doesn't support realloc
							 | 
						||
| 
								 | 
							
								                         code cleanup
							 | 
						||
| 
								 | 
							
								      2.08  (2015-09-13) fix to 2.07 cleanup, reading RGB PSD as RGBA
							 | 
						||
| 
								 | 
							
								      2.07  (2015-09-13) fix compiler warnings
							 | 
						||
| 
								 | 
							
								                         partial animated GIF support
							 | 
						||
| 
								 | 
							
								                         limited 16-bpc PSD support
							 | 
						||
| 
								 | 
							
								                         #ifdef unused functions
							 | 
						||
| 
								 | 
							
								                         bug with < 92 byte PIC,PNM,HDR,TGA
							 | 
						||
| 
								 | 
							
								      2.06  (2015-04-19) fix bug where PSD returns wrong '*comp' value
							 | 
						||
| 
								 | 
							
								      2.05  (2015-04-19) fix bug in progressive JPEG handling, fix warning
							 | 
						||
| 
								 | 
							
								      2.04  (2015-04-15) try to re-enable SIMD on MinGW 64-bit
							 | 
						||
| 
								 | 
							
								      2.03  (2015-04-12) extra corruption checking (mmozeiko)
							 | 
						||
| 
								 | 
							
								                         stbi_set_flip_vertically_on_load (nguillemot)
							 | 
						||
| 
								 | 
							
								                         fix NEON support; fix mingw support
							 | 
						||
| 
								 | 
							
								      2.02  (2015-01-19) fix incorrect assert, fix warning
							 | 
						||
| 
								 | 
							
								      2.01  (2015-01-17) fix various warnings; suppress SIMD on gcc 32-bit without -msse2
							 | 
						||
| 
								 | 
							
								      2.00b (2014-12-25) fix STBI_MALLOC in progressive JPEG
							 | 
						||
| 
								 | 
							
								      2.00  (2014-12-25) optimize JPG, including x86 SSE2 & NEON SIMD (ryg)
							 | 
						||
| 
								 | 
							
								                         progressive JPEG (stb)
							 | 
						||
| 
								 | 
							
								                         PGM/PPM support (Ken Miller)
							 | 
						||
| 
								 | 
							
								                         STBI_MALLOC,STBI_REALLOC,STBI_FREE
							 | 
						||
| 
								 | 
							
								                         GIF bugfix -- seemingly never worked
							 | 
						||
| 
								 | 
							
								                         STBI_NO_*, STBI_ONLY_*
							 | 
						||
| 
								 | 
							
								      1.48  (2014-12-14) fix incorrectly-named assert()
							 | 
						||
| 
								 | 
							
								      1.47  (2014-12-14) 1/2/4-bit PNG support, both direct and paletted (Omar Cornut & stb)
							 | 
						||
| 
								 | 
							
								                         optimize PNG (ryg)
							 | 
						||
| 
								 | 
							
								                         fix bug in interlaced PNG with user-specified channel count (stb)
							 | 
						||
| 
								 | 
							
								      1.46  (2014-08-26)
							 | 
						||
| 
								 | 
							
								              fix broken tRNS chunk (colorkey-style transparency) in non-paletted PNG
							 | 
						||
| 
								 | 
							
								      1.45  (2014-08-16)
							 | 
						||
| 
								 | 
							
								              fix MSVC-ARM internal compiler error by wrapping malloc
							 | 
						||
| 
								 | 
							
								      1.44  (2014-08-07)
							 | 
						||
| 
								 | 
							
								              various warning fixes from Ronny Chevalier
							 | 
						||
| 
								 | 
							
								      1.43  (2014-07-15)
							 | 
						||
| 
								 | 
							
								              fix MSVC-only compiler problem in code changed in 1.42
							 | 
						||
| 
								 | 
							
								      1.42  (2014-07-09)
							 | 
						||
| 
								 | 
							
								              don't define _CRT_SECURE_NO_WARNINGS (affects user code)
							 | 
						||
| 
								 | 
							
								              fixes to stbi__cleanup_jpeg path
							 | 
						||
| 
								 | 
							
								              added STBI_ASSERT to avoid requiring assert.h
							 | 
						||
| 
								 | 
							
								      1.41  (2014-06-25)
							 | 
						||
| 
								 | 
							
								              fix search&replace from 1.36 that messed up comments/error messages
							 | 
						||
| 
								 | 
							
								      1.40  (2014-06-22)
							 | 
						||
| 
								 | 
							
								              fix gcc struct-initialization warning
							 | 
						||
| 
								 | 
							
								      1.39  (2014-06-15)
							 | 
						||
| 
								 | 
							
								              fix to TGA optimization when req_comp != number of components in TGA;
							 | 
						||
| 
								 | 
							
								              fix to GIF loading because BMP wasn't rewinding (whoops, no GIFs in my test suite)
							 | 
						||
| 
								 | 
							
								              add support for BMP version 5 (more ignored fields)
							 | 
						||
| 
								 | 
							
								      1.38  (2014-06-06)
							 | 
						||
| 
								 | 
							
								              suppress MSVC warnings on integer casts truncating values
							 | 
						||
| 
								 | 
							
								              fix accidental rename of 'skip' field of I/O
							 | 
						||
| 
								 | 
							
								      1.37  (2014-06-04)
							 | 
						||
| 
								 | 
							
								              remove duplicate typedef
							 | 
						||
| 
								 | 
							
								      1.36  (2014-06-03)
							 | 
						||
| 
								 | 
							
								              convert to header file single-file library
							 | 
						||
| 
								 | 
							
								              if de-iphone isn't set, load iphone images color-swapped instead of returning NULL
							 | 
						||
| 
								 | 
							
								      1.35  (2014-05-27)
							 | 
						||
| 
								 | 
							
								              various warnings
							 | 
						||
| 
								 | 
							
								              fix broken STBI_SIMD path
							 | 
						||
| 
								 | 
							
								              fix bug where stbi_load_from_file no longer left file pointer in correct place
							 | 
						||
| 
								 | 
							
								              fix broken non-easy path for 32-bit BMP (possibly never used)
							 | 
						||
| 
								 | 
							
								              TGA optimization by Arseny Kapoulkine
							 | 
						||
| 
								 | 
							
								      1.34  (unknown)
							 | 
						||
| 
								 | 
							
								              use STBI_NOTUSED in stbi__resample_row_generic(), fix one more leak in tga failure case
							 | 
						||
| 
								 | 
							
								      1.33  (2011-07-14)
							 | 
						||
| 
								 | 
							
								              make stbi_is_hdr work in STBI_NO_HDR (as specified), minor compiler-friendly improvements
							 | 
						||
| 
								 | 
							
								      1.32  (2011-07-13)
							 | 
						||
| 
								 | 
							
								              support for "info" function for all supported filetypes (SpartanJ)
							 | 
						||
| 
								 | 
							
								      1.31  (2011-06-20)
							 | 
						||
| 
								 | 
							
								              a few more leak fixes, bug in PNG handling (SpartanJ)
							 | 
						||
| 
								 | 
							
								      1.30  (2011-06-11)
							 | 
						||
| 
								 | 
							
								              added ability to load files via callbacks to accomidate custom input streams (Ben Wenger)
							 | 
						||
| 
								 | 
							
								              removed deprecated format-specific test/load functions
							 | 
						||
| 
								 | 
							
								              removed support for installable file formats (stbi_loader) -- would have been broken for IO callbacks anyway
							 | 
						||
| 
								 | 
							
								              error cases in bmp and tga give messages and don't leak (Raymond Barbiero, grisha)
							 | 
						||
| 
								 | 
							
								              fix inefficiency in decoding 32-bit BMP (David Woo)
							 | 
						||
| 
								 | 
							
								      1.29  (2010-08-16)
							 | 
						||
| 
								 | 
							
								              various warning fixes from Aurelien Pocheville
							 | 
						||
| 
								 | 
							
								      1.28  (2010-08-01)
							 | 
						||
| 
								 | 
							
								              fix bug in GIF palette transparency (SpartanJ)
							 | 
						||
| 
								 | 
							
								      1.27  (2010-08-01)
							 | 
						||
| 
								 | 
							
								              cast-to-stbi_uc to fix warnings
							 | 
						||
| 
								 | 
							
								      1.26  (2010-07-24)
							 | 
						||
| 
								 | 
							
								              fix bug in file buffering for PNG reported by SpartanJ
							 | 
						||
| 
								 | 
							
								      1.25  (2010-07-17)
							 | 
						||
| 
								 | 
							
								              refix trans_data warning (Won Chun)
							 | 
						||
| 
								 | 
							
								      1.24  (2010-07-12)
							 | 
						||
| 
								 | 
							
								              perf improvements reading from files on platforms with lock-heavy fgetc()
							 | 
						||
| 
								 | 
							
								              minor perf improvements for jpeg
							 | 
						||
| 
								 | 
							
								              deprecated type-specific functions so we'll get feedback if they're needed
							 | 
						||
| 
								 | 
							
								              attempt to fix trans_data warning (Won Chun)
							 | 
						||
| 
								 | 
							
								      1.23    fixed bug in iPhone support
							 | 
						||
| 
								 | 
							
								      1.22  (2010-07-10)
							 | 
						||
| 
								 | 
							
								              removed image *writing* support
							 | 
						||
| 
								 | 
							
								              stbi_info support from Jetro Lauha
							 | 
						||
| 
								 | 
							
								              GIF support from Jean-Marc Lienher
							 | 
						||
| 
								 | 
							
								              iPhone PNG-extensions from James Brown
							 | 
						||
| 
								 | 
							
								              warning-fixes from Nicolas Schulz and Janez Zemva (i.stbi__err. Janez (U+017D)emva)
							 | 
						||
| 
								 | 
							
								      1.21    fix use of 'stbi_uc' in header (reported by jon blow)
							 | 
						||
| 
								 | 
							
								      1.20    added support for Softimage PIC, by Tom Seddon
							 | 
						||
| 
								 | 
							
								      1.19    bug in interlaced PNG corruption check (found by ryg)
							 | 
						||
| 
								 | 
							
								      1.18  (2008-08-02)
							 | 
						||
| 
								 | 
							
								              fix a threading bug (local mutable static)
							 | 
						||
| 
								 | 
							
								      1.17    support interlaced PNG
							 | 
						||
| 
								 | 
							
								      1.16    major bugfix - stbi__convert_format converted one too many pixels
							 | 
						||
| 
								 | 
							
								      1.15    initialize some fields for thread safety
							 | 
						||
| 
								 | 
							
								      1.14    fix threadsafe conversion bug
							 | 
						||
| 
								 | 
							
								              header-file-only version (#define STBI_HEADER_FILE_ONLY before including)
							 | 
						||
| 
								 | 
							
								      1.13    threadsafe
							 | 
						||
| 
								 | 
							
								      1.12    const qualifiers in the API
							 | 
						||
| 
								 | 
							
								      1.11    Support installable IDCT, colorspace conversion routines
							 | 
						||
| 
								 | 
							
								      1.10    Fixes for 64-bit (don't use "unsigned long")
							 | 
						||
| 
								 | 
							
								              optimized upsampling by Fabian "ryg" Giesen
							 | 
						||
| 
								 | 
							
								      1.09    Fix format-conversion for PSD code (bad global variables!)
							 | 
						||
| 
								 | 
							
								      1.08    Thatcher Ulrich's PSD code integrated by Nicolas Schulz
							 | 
						||
| 
								 | 
							
								      1.07    attempt to fix C++ warning/errors again
							 | 
						||
| 
								 | 
							
								      1.06    attempt to fix C++ warning/errors again
							 | 
						||
| 
								 | 
							
								      1.05    fix TGA loading to return correct *comp and use good luminance calc
							 | 
						||
| 
								 | 
							
								      1.04    default float alpha is 1, not 255; use 'void *' for stbi_image_free
							 | 
						||
| 
								 | 
							
								      1.03    bugfixes to STBI_NO_STDIO, STBI_NO_HDR
							 | 
						||
| 
								 | 
							
								      1.02    support for (subset of) HDR files, float interface for preferred access to them
							 | 
						||
| 
								 | 
							
								      1.01    fix bug: possible bug in handling right-side up bmps... not sure
							 | 
						||
| 
								 | 
							
								              fix bug: the stbi__bmp_load() and stbi__tga_load() functions didn't work at all
							 | 
						||
| 
								 | 
							
								      1.00    interface to zlib that skips zlib header
							 | 
						||
| 
								 | 
							
								      0.99    correct handling of alpha in palette
							 | 
						||
| 
								 | 
							
								      0.98    TGA loader by lonesock; dynamically add loaders (untested)
							 | 
						||
| 
								 | 
							
								      0.97    jpeg errors on too large a file; also catch another malloc failure
							 | 
						||
| 
								 | 
							
								      0.96    fix detection of invalid v value - particleman@mollyrocket forum
							 | 
						||
| 
								 | 
							
								      0.95    during header scan, seek to markers in case of padding
							 | 
						||
| 
								 | 
							
								      0.94    STBI_NO_STDIO to disable stdio usage; rename all #defines the same
							 | 
						||
| 
								 | 
							
								      0.93    handle jpegtran output; verbose errors
							 | 
						||
| 
								 | 
							
								      0.92    read 4,8,16,24,32-bit BMP files of several formats
							 | 
						||
| 
								 | 
							
								      0.91    output 24-bit Windows 3.0 BMP files
							 | 
						||
| 
								 | 
							
								      0.90    fix a few more warnings; bump version number to approach 1.0
							 | 
						||
| 
								 | 
							
								      0.61    bugfixes due to Marc LeBlanc, Christopher Lloyd
							 | 
						||
| 
								 | 
							
								      0.60    fix compiling as c++
							 | 
						||
| 
								 | 
							
								      0.59    fix warnings: merge Dave Moore's -Wall fixes
							 | 
						||
| 
								 | 
							
								      0.58    fix bug: zlib uncompressed mode len/nlen was wrong endian
							 | 
						||
| 
								 | 
							
								      0.57    fix bug: jpg last huffman symbol before marker was >9 bits but less than 16 available
							 | 
						||
| 
								 | 
							
								      0.56    fix bug: zlib uncompressed mode len vs. nlen
							 | 
						||
| 
								 | 
							
								      0.55    fix bug: restart_interval not initialized to 0
							 | 
						||
| 
								 | 
							
								      0.54    allow NULL for 'int *comp'
							 | 
						||
| 
								 | 
							
								      0.53    fix bug in png 3->4; speedup png decoding
							 | 
						||
| 
								 | 
							
								      0.52    png handles req_comp=3,4 directly; minor cleanup; jpeg comments
							 | 
						||
| 
								 | 
							
								      0.51    obey req_comp requests, 1-component jpegs return as 1-component,
							 | 
						||
| 
								 | 
							
								              on 'test' only check type, not whether we support this variant
							 | 
						||
| 
								 | 
							
								      0.50  (2006-11-19)
							 | 
						||
| 
								 | 
							
								              first released version
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								------------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								This software is available under 2 licenses -- choose whichever you prefer.
							 | 
						||
| 
								 | 
							
								------------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								ALTERNATIVE A - MIT License
							 | 
						||
| 
								 | 
							
								Copyright (c) 2017 Sean Barrett
							 | 
						||
| 
								 | 
							
								Permission is hereby granted, free of charge, to any person obtaining a copy of
							 | 
						||
| 
								 | 
							
								this software and associated documentation files (the "Software"), to deal in
							 | 
						||
| 
								 | 
							
								the Software without restriction, including without limitation the rights to
							 | 
						||
| 
								 | 
							
								use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
							 | 
						||
| 
								 | 
							
								of the Software, and to permit persons to whom the Software is furnished to do
							 | 
						||
| 
								 | 
							
								so, subject to the following conditions:
							 | 
						||
| 
								 | 
							
								The above copyright notice and this permission notice shall be included in all
							 | 
						||
| 
								 | 
							
								copies or substantial portions of the Software.
							 | 
						||
| 
								 | 
							
								THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
							 | 
						||
| 
								 | 
							
								IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
							 | 
						||
| 
								 | 
							
								FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
							 | 
						||
| 
								 | 
							
								AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
							 | 
						||
| 
								 | 
							
								LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
							 | 
						||
| 
								 | 
							
								OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
							 | 
						||
| 
								 | 
							
								SOFTWARE.
							 | 
						||
| 
								 | 
							
								------------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								ALTERNATIVE B - Public Domain (www.unlicense.org)
							 | 
						||
| 
								 | 
							
								This is free and unencumbered software released into the public domain.
							 | 
						||
| 
								 | 
							
								Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
							 | 
						||
| 
								 | 
							
								software, either in source code form or as a compiled binary, for any purpose,
							 | 
						||
| 
								 | 
							
								commercial or non-commercial, and by any means.
							 | 
						||
| 
								 | 
							
								In jurisdictions that recognize copyright laws, the author or authors of this
							 | 
						||
| 
								 | 
							
								software dedicate any and all copyright interest in the software to the public
							 | 
						||
| 
								 | 
							
								domain. We make this dedication for the benefit of the public at large and to
							 | 
						||
| 
								 | 
							
								the detriment of our heirs and successors. We intend this dedication to be an
							 | 
						||
| 
								 | 
							
								overt act of relinquishment in perpetuity of all present and future rights to
							 | 
						||
| 
								 | 
							
								this software under copyright law.
							 | 
						||
| 
								 | 
							
								THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
							 | 
						||
| 
								 | 
							
								IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
							 | 
						||
| 
								 | 
							
								FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
							 | 
						||
| 
								 | 
							
								AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
							 | 
						||
| 
								 | 
							
								ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
							 | 
						||
| 
								 | 
							
								WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
							 | 
						||
| 
								 | 
							
								------------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								*/
							 |