[英]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位。因此您可以摆脱该结构,而使用DWORD
或uint32_t
。 这样,您可以使用0x00RRGGBB
或0x00BBGGRR
像素格式一次设置所有颜色通道。 您甚至可以将最高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.