0

.bmp ファイルを作成しようとしていますが、ファイルが認識されません。私は何を間違っていますか?

#define ImageWidgh  1920
#define ImageHeight 1080
#define fileSize ImageWidgh*ImageHeight*3+54

struct BMPH
{
    short Signature;
    long int FileSize,reserved,DataOffest;
}BMPH;
struct BMPIH
{
    long int Size,Width,Height;
    short Planes,BitCount;
    long int Compression,ImageSize,XpixelsPerM,YpixelsPerM,ColorsUsed,ColorImportant;
}BMPIH;
struct BMPCT
{
    unsigned char Red,Green,Blue;
}BMPCT;
BMPH  *getBMPH()
{
    BMPH New;
    New.Signature='BM';
    New.FileSize=fileSize;
    New.reserved=0;
    New.DataOffest=54;
    return &New;
}
BMPIH *getBMPIH()
{
    BMPIH New;
    New.Size=40;
    New.Width=ImageWidgh;
    New.Height=ImageHeight;
    New.Planes=1;
    New.BitCount=24;
    New.Compression=0;
    New.ImageSize=0;
    New.XpixelsPerM=0;
    New.YpixelsPerM=0;
    New.ColorsUsed=0;
    New.ColorImportant=0;
    return &New;
}
BMPCT Pixels [ImageWidgh][ImageHeight];
void writeFile()
{
    FILE *file;
    file=fopen("D://test.bmp","wb");
    fwrite(getBMPH() ,sizeof(BMPH) ,1,file);
    fwrite(getBMPIH(),sizeof(BMPIH),1,file);
    fwrite(&Pixels   ,ImageWidgh*ImageHeight*3,1,file);
    fclose(file);
}
4

2 に答える 2

5

古典的な間違い: ローカル変数へのポインターを返していますが、関数を終了するとすぐに破棄されます。ポインターは意味不明またはさらに悪い方向を指してしまいます。

関数がポインターではなく完全な構造を返すようにするか、関数内で変数を作成するのではなく、ポインターを関数に渡します。

于 2012-08-01T22:48:55.017 に答える
0

これは私には正しくありません:

New.Signature='BM';

確かにあなたは欲しい:

New.Signature = *(short*)"BM";
于 2012-08-01T23:02:03.787 に答える