在C中裁剪.ppm文件

在C中裁剪.ppm文件,c,file-io,scanf,crop,ppm,C,File Io,Scanf,Crop,Ppm,我正在开发一个C程序,该程序可以将.ppm文件从起点像素(x,y)(裁剪图像的左上角)裁剪到终点像素(x+w,x+h)(裁剪图像的左下角) .ppm文件中的数据格式如下: r g b r g b r g b r g b r g b r g b r g b r g b r g b r g b r g b r g b r g b r g b r g b r g b r g b r g b r g b r g b r g b r g b r g b r g b 有没有一种简单的方法可以避免使用二维数组

我正在开发一个C程序,该程序可以将.ppm文件从起点像素(x,y)(裁剪图像的左上角)裁剪到终点像素(x+w,x+h)(裁剪图像的左下角)

.ppm文件中的数据格式如下:

r g b r g b r g b r g b r g b r g b
r g b r g b r g b r g b r g b r g b
r g b r g b r g b r g b r g b r g b
r g b r g b r g b r g b r g b r g b


有没有一种简单的方法可以避免使用二维数组,使用scanf()实现这一点?

一种简单的方法是在读取文件时跟踪像素坐标。如果当前处于裁剪矩形中,则存储像素;否则,跳过它


如果您想更进一步:计算出每行开头的字节偏移量,查找它,然后读取整行。

警告,某些pnm文件处于二进制模式(它们在文件内容开头的数字不同)


也许查找的来源会有所帮助?

应该是“如果当前在裁剪矩形中,请写入像素;否则,请跳过它”IIRC因为没有填充值,所以线条的长度不同。您需要扫描整个文件并找到所有的\n以确定行位置。@anatolyg我已将单词改为store,以更好地反映我的意思。@Martin Beckett您是对的,我忘了ppm是ASCII格式