我有一个分配处理将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;
答案 0 :(得分:0)
阅读BMP文件格式(http://en.wikipedia.org/wiki/BMP_file_format),特别是pixal存储详细信息。它们存储在行中。以字节读取它们并使用位运算符,可能是uint8_t :)因为它是一个赋值,你应该自己编写代码。至少试试。