0

直角に回転させるために、BMP ファイルを読み込んで 2 次元のバッファに保存しようとしています。ただし、最終ファイルが正しくなく、表示できません。次のコードの問題は何ですか?

#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;
}
4

1 に答える 1

3

少なくとも、BMP ファイルにはBMP Headerがあるため、単純に BMP ファイルを最初から読み取ることはできません。

まず、BMP パラメーター (画像サイズ、データ オフセット、ピクセルあたりのビット数など) を取得するために、ヘッダーを読み取る必要があります。

次に、画像を回転させて結果を確認できるようにするには、ヘッダーも変更する必要があります。

于 2013-03-10T12:55:31.683 に答える