如何通过C ++将圆圈写入PPM文件
how to write circle to ppm file by c++
我想在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);
我会创建一个行指针数组
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 RGB
{
uint8_t db[4];
uint32_t dd;
};
唯一的问题是,如果您的 ppm 不知道 32bpp,那么您需要在保存到文件之前将图像数据转换为 24bpp
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 如何通过C ++将圆圈写入PPM文件
- 从.ppm转换为.png文件
- C :操纵PPM文件的问题
- C 读取/写作PPM图像文件灰色图像
- 用C 编写一个PPM文件,并获得扭曲结果
- 打印出 ppm 文件的数组时出现问题
- C++程序读取ppm和pgm文件,对其进行操作并输出.编译错误
- 读取/写入PPM图像文件C++
- 读取PPM文件并使用Opengl和c++进行显示.颜色不正确
- 将字节从 P6 PPM 文件读取到字符数组 (C++)
- 如何将ppm文件转换为OpenGL纹理
- 从无符号字符*AND无符号短*指针(RGB)(C++)创建/保存PPM文件
- 如何读取和写入ppm文件
- 在c++中创建两个颜色线性渐变.ppm文件
- 读取PPM文件头(类型P6),宽度缺失
- PPM文件,c++读写
- OpenCV -如何从.ppm文件列表中生成.avi文件
- 管道ppm文件到ffmpeg在c++中创建电影