2

我有一个任务是处理将 bmp 文件读入内存,反转像素,然后将反转后的图像保存到新文件中。从这个描述来看,这似乎相当容易,但我认为我的教授在解释这样做的必要步骤方面做得并不好。他教了我们关于 fread 和 fwrite 的知识,但还有更多。任何人都可以解释解决这个问题的过程(我不是在寻找一个直接的答案,只是一个解释)。

这是问题描述的链接:https ://engineering.purdue.edu/OOSD/F2012/Exercises/ex5.html

提前感谢您的任何帮助。注意:我实际上已经研究过这个问题,但由于我对这个信息没有很好的立场,所以它不是很“点击”。

我想我现在坚持的部分是:

    /* The input argument is the source file pointer. The function will first construct a BMP_Image image by allocating memory to it.
 * Then the function read the header from source image to the image's header.
 * Compute data size, width, height, and bytes_per_pixel of the image and stores them as image's attributes.
 * Finally, allocate menory for image's data according to the image size.
 * Return image;
*/
BMP_Image* CreateBMPImage(FILE* fptr)
{

  //Allocate memory for BMP_Image*;

  //Read the first 54 bytes of the source into the header

  //Compute data size, width, height, and bytes per pixel;

  //Allocate memory for image data
}

BMP_Image 结构如下所示:

typedef struct {
    BMP_Header header;
    int data_size;
    int width;
    int height;
    int bytes_per_pixel; // This amount should be equals to number of bits/8
    char *data;
} BMP_Image;
4

1 回答 1

0

阅读 BMP 文件格式 (http://en.wikipedia.org/wiki/BMP_file_format),特别是像素存储详细信息。它们存储在行中。以字节为单位读取它们并使用位运算符,可能是 uint8_t :) 因为它是一个赋值,所以您应该自己编写代码。至少尝试一下。

于 2012-10-21T17:27:15.847 回答