0
我正在尝试读取BMP文件并将其保存在2维的缓冲区中,以便以直角旋转它。但是,最终文件不正确,无法显示。以下代码中的问题是什么?读取BMP文件并旋转
#include <fstream.h>
#include <iostream.h>
int main() {
long int width=686;
long int height=800 ;
/* open file */
FILE * bitmap_file= fopen("filename.bmp", "rb");
if(!bitmap_file) {
printf("Could not find file.\n");
fclose(bitmap_file);
return 0;
}
printf("File opened.\n");
typedef struct buffer1
{
int red;
int green;
int blue;
} buffer1;
static buffer1 buffer_bitmap1[686][800];
fseek(bitmap_file, 0, SEEK_SET);
int count=0;
for(int i = 0; i <8; ++i){
for(int j = 0; j <6; ++j){
fread(&buffer_bitmap1[j][i].red , 1, 1, bitmap_file); /*for rotate bmp exchange the width with height in matrix.*/
fread(&buffer_bitmap1[j][i].green, 1, 1, bitmap_file);
fread(&buffer_bitmap1[j][i].blue, 1, 1, bitmap_file);
count=count+8;
fseek(bitmap_file,count, SEEK_CUR); /*move pointer*/
}
}
fclose(bitmap_file);
FILE *bitmap_file1= fopen("filename.bmp", "a");
count=0;
fseek(bitmap_file, 0, SEEK_SET);
char * a ="a";
for(int i = 0; i <6; ++i){
for(int j = 0; j <8; ++j) {
fwrite(&buffer_bitmap1[i][j],1,1,bitmap_file1);
fwrite(&buffer_bitmap1[i][j].blue,1,1,bitmap_file1);
fwrite(&buffer_bitmap1[i][j].green,1,1,bitmap_file1);
count=count+8;
fseek(bitmap_file, 8, SEEK_CUR); /*move pointer*/
}
}
fclose(bitmap_file);
return 0;
}
看起来像纯C语言为什么它被标记为C++? – 2013-03-10 12:46:40
所以,你包含'fstream.h'和'iostream.h'(它们都不应该存在),并且根本不使用它们。然后你使用了一堆隐含的声明函数,因为你没有包含'cstdio'。哎哟。除此之外,你能提供能显示你想要的结果和你的实际结果的图片吗? – Zeta 2013-03-10 12:49:18
在函数作用域中定义结构体?现在,这是一个怪异的东西! – 2013-03-10 12:54:28