2016-12-09 57 views
1

我试图使用fseek()函数将指针移动到fread()以使fread()获取数据并将其传递给fwrite() n次。具体而言,我需要以n的比例放大bmp。如何使用fseek()将指针正确移动到fread()函数中? (C)

所以要做垂直放大,我试图将fread()指针移回输入BMP的宽度,使用fseek()

输入和输出数据都是24位BMP。

fseek(inputPointer, lineBytes, SEEK_CUR); 

要计算偏移量,我使用了sizeof(像素)*宽度的BMP * -1。

我的两个主要问题如下:

  1. 如何检查的一行代码指针的当前位置?
  2. fread()是否实际上移动了通过它的指针或者只是从指针读取所有内容到文件结尾?
+1

2.问题:'fread'读取的字节数与您打开文件后当前指针为零的数量相同,您可以使用'fseek'设置它。例如:你的文件包含'123456789',你读4个字节你得到'1234',你再读3个字节,你会得到'567',然后你'fseek'到2,读2个字节,你会得到'34'。 –

+1

1.问:您正在寻找['fgetpos'](http://www.cplusplus.com/reference/cstdio/fgetpos/) –

+0

提示。在尝试按照您所描述的方式执行bmp操作之前,通过制作一些简单的测试程序来熟悉“fopen”,“fread”,“fwrite”,“fseek”和“fgetpos”。 –

回答

1
  1. 我如何检查指针的一行代码的当前位置?

从你的问题的上下文中,我认为你问如何找到一个流的当前位置。这将是ftell()fgetpos()的目的。前者是具有fseek()更多种常规配对:

long offset = ftell(my_file); 
  • 是否的fread()实际移动通过它的指针或从指针到结束的只是读取一切文件?
  • 使用更传统的术语“偏移量”而不是“指针”可能会对您有所帮助。在任何情况下,当前文件偏移量描述了文件开头之后的字节数是将要读取或写入的下一个字节。所以如果偏移量为0,那么读取的下一个字节将是文件中的第一个;如果偏移量是16,那么读取的下一个字节将是(跳过或已经读取前16个)的第第。 fread()可能会或可能不会从那里读取文件的结尾,具体取决于它的参数和文件的长度。

    我试图移动的fread()由BMP [...] 要计算的偏移量,我用sizeof(pixel) * width of BMP * -1输入的宽度指针回来。

    基于您的代码,我想你的意思是你要移动的文件由BMP 的像素测量的宽度偏差,通过sizeof(pixel)否则乘以没有任何意义。即便如此,这可能不是正确的因素。sizeof(pixel)测量程序的表示pixel(不管是什么)的大小,这可能与文件中占据的大小相差一个像素。如果他们确实不同,那么后者就是你想要的。

    此外,如果你想改变向前或向后偏移一行,那么-1对我来说没有任何意义。 (无论您在(2)中询问的单个文件偏移值的具体意义如何,因为在您计算两个偏移量之间的差异时该值会消失)。