看到书上有用下面的代码读取位图文件头,调试运行也正确。但我把bf换成指针pbf进行操作,调试时弹出Unhandled exception in Bitmap.exe access violation,指向最后一行,而且pbf中的数据都是错误呢DWORD WriteNum;
  BITMAPFILEHEADER bf;
  ReadFile(m_hFile, &bf, 14, &WriteNum, NULL);
int bfsize = bf.bfSize;

解决方案 »

  1.   

    你的指针pbf分配空间了吗?
    BITMAPFILEHEADER *pbf = new BITMAPFILEHEADER();
    pbf->bfSize = sizeof(BITMAPFILEHEADER);
    ReadFile(m_hFile, pbf, sizeof(BITMAPFILEHEADER), &WriteNum, NULL);
      

  2.   

    使用指针操作时,指针所指向的空间应该是有效的才可以,因此,在声明使用一个指针时,应该为其分配一个有效的空间,使用完毕后,还应该及时delete释放空间,一般删除对象用delete,删除数组用delete[]。
    楼主基本的指针使用看来还不过关呀,可以参阅C++ Primer学习下。
      

  3.   

    楼主,请教一个草鸟问题,怎么把一个bmp图像载入C程序?
      

  4.   

    那应该用C语言的文件操作函数吧,我不太清楚,我用的是WINAPI函数
    你可以去搜 C\C++文件操作,里面有讲C语言文件操作的
      

  5.   

    大概就像这样吧
    回传的bitmap就是图片
    图片长宽由参数获得
    要引入wingdi.h
    unsigned char* Game_LoadBMP( char *FileName, int *width, int *height )
    {
    FILE *fp = NULL;
    BITMAPFILEHEADER bitmapFileHeader; // Bitmap file header
    BITMAPINFOHEADER bitmapInfo; // Bitmap information
    DWORD infoSize; // Size of information
    DWORD bitSize; // Size of bitmap
    unsigned char *bitmap = NULL;


    fread( &bitmapFileHeader, sizeof(BITMAPFILEHEADER), 1, fp );
    infoSize = bitmapFileHeader.bfOffBits - sizeof(BITMAPFILEHEADER);

    fread( &bitmapInfo, infoSize, 1, fp ); // 读取bitmap info
    *width  = bitmapInfo.biWidth; // 得知图片的宽
    *height = bitmapInfo.biHeight; // 图片的高
    bitSize = bitmapInfo.biSizeImage; // 影像档的位元数目(bitSize = pixel*3)
    bitmap = (unsigned char*)malloc( bitSize );

    fread( bitmap, bitSize, 1, fp ); // 到这里已经取得图片档了

    fclose( fp );

    return bitmap;
    }