Generating RGBA portable graphic images through C++ - GeeksforGeeks

23 May, 2020
PNG images are capable of supporting multiple image properties such as multiple colors, degree of transparency, Gamma correction, Lossless compression, etc. PNG images are widely used and preferred for numerous types of images.
For working with PNG files we will be using the PNGwriter platform-independent, wrapper open-source C++ library for libpng(PNG reference library) one of the most feature-rich library, written in C. PNGwriter library works on Linux, Unix, macOS, and Windows. Its supported features include opening existing PNG images, plotting and reading pixels in the RGB, HSV, and CMYK color spaces, basic shapes, scaling, bilinear interpolation, full TrueType antialiased and rotated text support, and Bezier curves. It requires the FreeType2 library for text support.For more documentation and libraries visit SourceForge, PNGwriter-github.
How images are generated:Pixels are the smallest unit that collectively generates an image. Each pixel has some numeric value which represents a color. Below are the steps:
We choose the desired height and width of the image.In the desired, we iterate and apply colors pixel by pixel.This collection of pixels is then stored with proper extension and properties, hence generating an image.
We choose the desired height and width of the image.
In the desired, we iterate and apply colors pixel by pixel.
This collection of pixels is then stored with proper extension and properties, hence generating an image.
Generating Image by applying colors:
Below is the program which generates the RGBA portal graphic images in C++:
// C++ program to generate PNG images  #include <iostream>#include <pngwriter.h>#include <string>  // Function to generate PNG imagevoid generate_PNG(int const width,                  int const height,                  std::string filepath){      // Print the filepath    cout << endl         << "Filepath: "         << filepath.c_str();      // Generate the flag    pngwriter flag{ width, height, 0,                    filepath.data() };      // Calculate sizes    int const size = width / 3;      // Fill the squares    flag.filledsquare(0, 0, size,                      2 * size, 0,                      0, 65535);      flag.filledsquare(size, 0, 2 * size,                      2 * size, 0,                      65535, 65535);      flag.filledsquare(2 * size, 0,                      3 * size, 2 * size,                      65535, 0, 65535);      // Close the flag    flag.close();}  // Driver codeint main(){    // Given width and height    int width = 300, height = 200;      // Filepath    std::string filepath;      // Function call to generate PNG image    generate_PNG(width, height, filepath);      return 0;}
Output:
Explanation:The above program takes width, height, and file address with a file name. The pngwriter class represents a PNG image. The constructor of the PNG image allows us to set the width and height in pixels, a background colour, and the path to the file where the image should be saved. As illustrated in the above code, we just arranged three solid colors side-by-side and for that, we used filledsquare() function which has taken the x-y coordinates value from start to end positions and a colour values (R, G, B). When the image is saved in memory, then call the close() method to save it to a disk file.
computer-graphics
C++
C++ Programs
Write From Home
CPP
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Map in C++ Standard Template Library (STL)
Inheritance in C++
C++ Classes and Objects
Constructors in C++
Bitwise Operators in C/C++
Header files in C/C++ and its uses
C++ Program for QuickSort
How to return multiple values from a function in C or C++?
Program to print ASCII Value of a character
C++ program for hashing with chaining