在C中裁剪.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在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 有没有一种简单的方法可以避免使用二维数组
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格式