如何仅使用系统调用在C中组合ppm图像文件?

时间:2018-02-01 15:40:14

标签: c image-processing system-calls ppm unistd.h

我在互联网上发现了一些类似的问题,但系统调用没有。

我正在我的系统编程课上练习。它要求您仅使用系统调用以二进制形式(P6,而不是P3)组合ppm图像文件。输入来自命令行。第一个输入是较大的图像文件,第二个输入是较小的图像文件,在输入之后,文件被组合并写入第三个文件,您可以将其指定为第三个输入的名称。较小的文件将写入较大文件的右上角。

由于我们正在使用系统调用,我假设我们主要使用open/read/write/lseek。我知道我的ppm文件会在开头存储幻数P6,然后存储文件的宽度和高度。我知道我可以通过从较大的ppm文件的第1行的左侧写入来使用lseek,然后在我的指针达到两个文件之间的大小差异时停止,并从中写出该行的剩余像素较小的文件。然后继续,逐行...

但是,我不知道如何实现这一点。我也不确定如何读取文件的宽度和高度。我有点迷茫。 有人可以帮助我走上正确的轨道吗?如果我确实有任何有意义的话,我会发布我的代码,但我刚刚创建了文件的文件描述符并打开它们到目前为止。

编辑:

我通过用较小的文件覆盖较大文件的右上角来组合它们。我不能保证图像的任何内容,所以我必须以某种方式从两个文件中拉出宽度和高度并进行比较,以确保第一个文件的宽度和高度都比第二个文件大。

我认为他们希望我们逐个像素地遍历文件,使用read读取每个像素的每个rgb值组。然后使用write逐个像素地循环写入。

EDIT2:

这是一个unix系统调用列表。它们在c库中可用,但这是我可以使用的全部内容:http://www.di.uevora.pt/~lmr/syscalls.html

0 个答案:

没有答案