📜  通过C++生成RGBA便携式图形图像

📅  最后修改于: 2021-05-30 17:49:54             🧑  作者: Mango

PNG图像能够支持多种图像属性,例如多种颜色,透明度,伽玛校正,无损压缩等。PNG图像被广泛使用,并且是多种类型图像的首选。

为了处理PNG文件,我们将使用PNGwriter平台无关的包装开源C++库,用于libpng (PNG参考库),这是功能最丰富的库之一,用C编写。PNGwriter库可在Linux,Unix,macOS上运行和Windows。其受支持的功能包括打开现有的PNG图像,在RGB,HSV和CMYK颜色空间中绘制和读取像素,基本形状,缩放,双线性插值,完整的TrueType抗锯齿和旋转文本支持以及Bezier曲线。它需要FreeType2库来支持文本。
有关更多文档和库,请访问SourceForge,PNGwriter-github。

如何生成图像:
像素是共同生成图像的最小单位。每个像素都有一些代表颜色的数值。步骤如下:

  1. 我们选择所需的图像高度和宽度。
  2. 根据需要,我们逐像素迭代并应用颜色。
  3. 然后以适当的扩展名和属性存储此像素集合,从而生成图像。

通过应用颜色生成图像:

下面是用C++生成RGBA门户图形图像的程序:

// C++ program to generate PNG images
  
#include 
#include 
#include 
  
// Function to generate PNG image
void 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 code
int 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;
}

输出:

解释:
上面的程序采用文件名的宽度,高度和文件地址。 pngwriter类表示PNG图像。 PNG图像的构造函数使我们可以设置像素的宽度和高度,背景色以及应保存图像的文件的路径。如上面的代码所示,我们只是并排排列了三种纯色,为此,我们使用filledsquare()函数,该函数从开始位置到结束位置都获取了xy坐标值和一个颜色值(R,G,B ) 。当映像保存在内存中时,然后调用close()方法将其保存到磁盘文件中。

想要从精选的最佳视频中学习和练习问题,请查看有关从基础到高级C++的C++基础课程以及有关语言和STL的C++ STL课程。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”