From ad8aab2a14a7b4dc01e33312d151b6f535f3c41e Mon Sep 17 00:00:00 2001 From: Lode Date: Sun, 24 Aug 2014 20:09:39 +0200 Subject: add example and dev files to LodePNG repository --- example_decode.cpp | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 example_decode.cpp (limited to 'example_decode.cpp') diff --git a/example_decode.cpp b/example_decode.cpp new file mode 100644 index 0000000..4eee6b8 --- /dev/null +++ b/example_decode.cpp @@ -0,0 +1,95 @@ +/* +LodePNG Examples + +Copyright (c) 2005-2012 Lode Vandevenne + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ + +#include "lodepng.h" +#include + +/* +3 ways to decode a PNG from a file to RGBA pixel data (and 2 in-memory ways). +*/ + +//g++ lodepng.cpp example_decode.cpp -ansi -pedantic -Wall -Wextra -O3 + + +//Example 1 +//Decode from disk to raw pixels with a single function call +void decodeOneStep(const char* filename) +{ + std::vector image; //the raw pixels + unsigned width, height; + + //decode + unsigned error = lodepng::decode(image, width, height, filename); + + //if there's an error, display it + if(error) std::cout << "decoder error " << error << ": " << lodepng_error_text(error) << std::endl; + + //the pixels are now in the vector "image", 4 bytes per pixel, ordered RGBARGBA..., use it as texture, draw it, ... +} + +//Example 2 +//Load PNG file from disk to memory first, then decode to raw pixels in memory. +void decodeTwoSteps(const char* filename) +{ + std::vector png; + std::vector image; //the raw pixels + unsigned width, height; + + //load and decode + lodepng::load_file(png, filename); + unsigned error = lodepng::decode(image, width, height, png); + + //if there's an error, display it + if(error) std::cout << "decoder error " << error << ": " << lodepng_error_text(error) << std::endl; + + //the pixels are now in the vector "image", 4 bytes per pixel, ordered RGBARGBA..., use it as texture, draw it, ... +} + +//Example 3 +//Load PNG file from disk using a State, normally needed for more advanced usage. +void decodeWithState(const char* filename) +{ + std::vector png; + std::vector image; //the raw pixels + unsigned width, height; + lodepng::State state; //optionally customize this one + + lodepng::load_file(png, filename); //load the image file with given filename + unsigned error = lodepng::decode(image, width, height, state, png); + + //if there's an error, display it + if(error) std::cout << "decoder error " << error << ": "<< lodepng_error_text(error) << std::endl; + + //the pixels are now in the vector "image", 4 bytes per pixel, ordered RGBARGBA..., use it as texture, draw it, ... + //State state contains extra information about the PNG such as text chunks, ... +} + +int main(int argc, char *argv[]) +{ + const char* filename = argc > 1 ? argv[1] : "test.png"; + + decodeOneStep(filename); +} + -- cgit v1.2.3