我想在ppm文件中绘制一个圆圈和X. 我使用以下方法(如下所述),但我想知道是否有比我使用的方法更快或更有效的方法。
我的方法是创建一个(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;
最后,我通过
将数组写入ppm文件imageFile.write(reinterpret_cast<char*>(&image), 3*dimx*dimy);
答案 0 :(得分:0)
我会创建一个行指针数组
RGB *pyx[dimy];
for (int y=0;y<dimy;y++) pyx[y]=image+(y*dimx);
所以现在您可以通过R / W访问任何像素(x,y),如:
pyx[y][x]=...;
...=pyx[y][x];
无需重新计算地址,这比每次像素访问的倍增要快得多......
另一件事是每像素使用32位而不是24位。所以你可以摆脱结构并使用DWORD
或uint32_t
代替。这样,您可以使用0x00RRGGBB
或0x00BBGGRR
像素格式一次设置所有颜色通道。您甚至可以将最高8位用于Alpha通道。
如果你仍然需要访问R,G,B,你可以使用union:
union RGB
{
uint8_t db[4];
uint32_t dd;
};
唯一的问题是,如果您的ppm不知道32bpp,那么您需要在保存到文件之前将图像数据转换为24bpp