请问下vc中如何保存位图到硬盘上。如何实现。谢谢

解决方案 »

  1.   

    http://blog.163.com/zgkingdom@126/blog/static/2273473200821351854167/
      

  2.   

    // pData为rgb24数据,width为位图宽度,height为位图高度,filename为位图文件的名字, bitCount位图的位数:24,或者 32
    void Snapshot( unsigned char * pData, int width, int height, const char * filename, int bitCount )
    {
    //int bitCount = 32;
    int bytes = bitCount / 8;
    int size = width*height*bytes; // 每个像素点3个字节 // 位图第一部分,文件信息
    BITMAPFILEHEADER bfh;
    bfh.bfType = 0x4d42;//0×4d42;  //bm
    bfh.bfSize = size  // data size
    + sizeof( BITMAPFILEHEADER ) // first section size
    + sizeof( BITMAPINFOHEADER ) // second section size
    ;
    bfh.bfReserved1 = 0; // reserved 
    bfh.bfReserved2 = 0; // reserved
    bfh.bfOffBits = bfh.bfSize - size; // 位图第二部分,数据信息
    BITMAPINFOHEADER bih;
    bih.biSize = sizeof(BITMAPINFOHEADER);
    bih.biWidth = width;
    bih.biHeight = height;
    bih.biPlanes = 1;
    bih.biBitCount = bitCount;
    bih.biCompression = 0;
    bih.biSizeImage = size;
    bih.biXPelsPerMeter = 0;
    bih.biYPelsPerMeter = 0;
    bih.biClrUsed = 0;
    bih.biClrImportant = 0; FILE * fp = fopen( filename, "wb");
    if( !fp ) return; //writeLog("fileheader  size=%d\r\n", sizeof(BITMAPFILEHEADER));
    fwrite( &bfh, 1, 14 /*sizeof(BITMAPFILEHEADER)*/, fp ); //writeLog("infoheader  size=%d\r\n", sizeof(BITMAPINFOHEADER)); fwrite( &bih, 1, sizeof(BITMAPINFOHEADER), fp ); //writeLog("framesize  size=%d\r\n", size);
    fwrite( pData, 1, size, fp );
    fclose( fp );
    }