| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- /* stb_image_write - v1.02 - public domain - http://nothings.org/stb/stb_image_write.h
- writes out PNG/BMP/TGA images to C stdio - Sean Barrett 2010-2015
- no warranty implied; use at your own risk
- Before #including,
- #define STB_IMAGE_WRITE_IMPLEMENTATION
- in the file that you want to have the implementation.
- Will probably not work correctly with strict-aliasing optimizations.
- ABOUT:
- This header file is a library for writing images to C stdio. It could be
- adapted to write to memory or a general streaming interface; let me know.
- The PNG output is not optimal; it is 20-50% larger than the file
- written by a decent optimizing implementation. This library is designed
- for source code compactness and simplicity, not optimal image file size
- or run-time performance.
- BUILDING:
- You can #define STBIW_ASSERT(x) before the #include to avoid using assert.h.
- You can #define STBIW_MALLOC(), STBIW_REALLOC(), and STBIW_FREE() to replace
- malloc,realloc,free.
- You can define STBIW_MEMMOVE() to replace memmove()
- USAGE:
- There are four functions, one for each image file format:
- int stbi_write_png(char const *filename, int w, int h, int comp, const void *data, int stride_in_bytes);
- int stbi_write_bmp(char const *filename, int w, int h, int comp, const void *data);
- int stbi_write_tga(char const *filename, int w, int h, int comp, const void *data);
- int stbi_write_hdr(char const *filename, int w, int h, int comp, const float *data);
- There are also four equivalent functions that use an arbitrary write function. You are
- expected to open/close your file-equivalent before and after calling these:
- int stbi_write_png_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data, int stride_in_bytes);
- int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data);
- int stbi_write_tga_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data);
- int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const float *data);
- where the callback is:
- void stbi_write_func(void *context, void *data, int size);
- You can define STBI_WRITE_NO_STDIO to disable the file variant of these
- functions, so the library will not use stdio.h at all. However, this will
- also disable HDR writing, because it requires stdio for formatted output.
- Each function returns 0 on failure and non-0 on success.
- The functions create an image file defined by the parameters. The image
- is a rectangle of pixels stored from left-to-right, top-to-bottom.
- Each pixel contains 'comp' channels of data stored interleaved with 8-bits
- per channel, in the following order: 1=Y, 2=YA, 3=RGB, 4=RGBA. (Y is
- monochrome color.) The rectangle is 'w' pixels wide and 'h' pixels tall.
- The *data pointer points to the first byte of the top-left-most pixel.
- For PNG, "stride_in_bytes" is the distance in bytes from the first byte of
- a row of pixels to the first byte of the next row of pixels.
- PNG creates output files with the same number of components as the input.
- The BMP format expands Y to RGB in the file format and does not
- output alpha.
- PNG supports writing rectangles of data even when the bytes storing rows of
- data are not consecutive in memory (e.g. sub-rectangles of a larger image),
- by supplying the stride between the beginning of adjacent rows. The other
- formats do not. (Thus you cannot write a native-format BMP through the BMP
- writer, both because it is in BGR order and because it may have padding
- at the end of the line.)
- HDR expects linear float data. Since the format is always 32-bit rgb(e)
- data, alpha (if provided) is discarded, and for monochrome data it is
- replicated across all three channels.
- TGA supports RLE or non-RLE compressed data. To use non-RLE-compressed
- data, set the global variable 'stbi_write_tga_with_rle' to 0.
- CREDITS:
- PNG/BMP/TGA
- Sean Barrett
- HDR
- Baldur Karlsson
- TGA monochrome:
- Jean-Sebastien Guay
- misc enhancements:
- Tim Kelsey
- TGA RLE
- Alan Hickman
- initial file IO callback implementation
- Emmanuel Julien
- bugfixes:
- github:Chribba
- Guillaume Chereau
- github:jry2
- github:romigrou
- Sergio Gonzalez
- Jonas Karlsson
- Filip Wasil
- Thatcher Ulrich
- LICENSE
- This software is dual-licensed to the public domain and under the following
- license: you are granted a perpetual, irrevocable license to copy, modify,
- publish, and distribute this file as you see fit.
- */
- // Modified by Lasse Oorni for Urho3D
- #ifndef INCLUDE_STB_IMAGE_WRITE_H
- #define INCLUDE_STB_IMAGE_WRITE_H
- #ifdef __cplusplus
- extern "C" {
- #endif
- #ifdef STB_IMAGE_WRITE_STATIC
- #define STBIWDEF static
- #else
- #define STBIWDEF extern
- extern int stbi_write_tga_with_rle;
- #endif
- #ifndef STBI_WRITE_NO_STDIO
- STBIWDEF int stbi_write_png(char const *filename, int w, int h, int comp, const void *data, int stride_in_bytes);
- STBIWDEF int stbi_write_bmp(char const *filename, int w, int h, int comp, const void *data);
- STBIWDEF int stbi_write_tga(char const *filename, int w, int h, int comp, const void *data);
- STBIWDEF int stbi_write_hdr(char const *filename, int w, int h, int comp, const float *data);
- #endif
- typedef void stbi_write_func(void *context, void *data, int size);
- STBIWDEF int stbi_write_png_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data, int stride_in_bytes);
- STBIWDEF int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data);
- STBIWDEF int stbi_write_tga_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data);
- STBIWDEF int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const float *data);
- // ATOMIC BEGIN
- unsigned char *stbi_write_png_to_mem(unsigned char *pixels, int stride_bytes, int x, int y, int n, int *out_len);
- // ATOMIC END
- #ifdef __cplusplus
- }
- #endif
- #endif//INCLUDE_STB_IMAGE_WRITE_H
- /* Revision history
- 1.02 (2016-04-02)
- avoid allocating large structures on the stack
- 1.01 (2016-01-16)
- STBIW_REALLOC_SIZED: support allocators with no realloc support
- avoid race-condition in crc initialization
- minor compile issues
- 1.00 (2015-09-14)
- installable file IO function
- 0.99 (2015-09-13)
- warning fixes; TGA rle support
- 0.98 (2015-04-08)
- added STBIW_MALLOC, STBIW_ASSERT etc
- 0.97 (2015-01-18)
- fixed HDR asserts, rewrote HDR rle logic
- 0.96 (2015-01-17)
- add HDR output
- fix monochrome BMP
- 0.95 (2014-08-17)
- add monochrome TGA output
- 0.94 (2014-05-31)
- rename private functions to avoid conflicts with stb_image.h
- 0.93 (2014-05-27)
- warning fixes
- 0.92 (2010-08-01)
- casts to unsigned char to fix warnings
- 0.91 (2010-07-17)
- first public release
- 0.90 first internal release
- */
|