繁体   English   中英

如何通过C ++将圆写到ppm文件

[英]how to write circle to ppm file by c++

我想画一个圆和X到一个ppm文件中。 我使用以下方法(如下所述),但是我想知道是否有比我使用的方法更快或更有效的方法。

我的方法是创建一个(n X m)大小的数组,该数组包含在每个RGB结构单元中

数组是

RGB image[dimx*dimy];

结构是

struct RGB {
      uint8_t red, green, blue;
 public:
      RGB() {}
      RGB(uint8_t red, uint8_t green, uint8_t blue): red(red), green(green), blue(blue) {}
};

我在正确的地方写了适当的值来画一个圆

image[x].red = 0;
image[x].green = 0;
image[x].blue = 0;

最后,我将阵列写入

imageFile.write(reinterpret_cast<char*>(&image), 3*dimx*dimy);

我会创建一个行指针数组

RGB *pyx[dimy];
for (int y=0;y<dimy;y++) pyx[y]=image+(y*dimx);

因此,现在您可以读/写访问任何像素(x,y),例如:

pyx[y][x]=...;
...=pyx[y][x];

无需重新计算地址,该地址比每次访问像素时都要快很多...

另一件事是每个像素使用32位而不是24位。因此您可以摆脱该结构,而使用DWORDuint32_t 这样,您可以使用0x00RRGGBB0x00BBGGRR像素格式一次设置所有颜色通道。 您甚至可以将最高8位用于alpha通道。

如果仍然需要访问R,G,B,则可以使用并集:

union RGB
    {
    uint8_t db[4];
    uint32_t dd;
    };

唯一的问题是,如果您的ppm不知道32bpp,那么在保存到文件之前,您需要将图像数据转换为24bpp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM