原始数据是16位的,想保存为16位的bmp文件
我不知道该怎样写象素数据,参考资料上采用555
或者565编码,不过我有些不是很清楚,谁能给指点一下。
原始数据是raw格式的。

解决方案 »

  1.   

    先写16位BMP头
        BITMAPINFO RGB16BitsBITMAPINFO; 
        ZeroMemory(&RGB16BitsBITMAPINFO, sizeof(BITMAPINFO));
        RGB16BitsBITMAPINFO.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
        RGB16BitsBITMAPINFO.bmiHeader.biWidth = width;
        RGB16BitsBITMAPINFO.bmiHeader.biHeight = height;
        RGB16BitsBITMAPINFO.bmiHeader.biPlanes = 1;
        RGB16BitsBITMAPINFO.bmiHeader.biBitCount = 16;
    在填充数据 BITMAPFILEHEADER bmBITMAPFILEHEADER;
    ZeroMemory(&bmBITMAPFILEHEADER, sizeof(BITMAPFILEHEADER));
    bmBITMAPFILEHEADER.bfType = 0x4d42;  //bmp  
        bmBITMAPFILEHEADER.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
        bmBITMAPFILEHEADER.bfSize = bmBITMAPFILEHEADER.bfOffBits + ((width*height)*2); ///2=(16 / 8)
     
    //write into file
    FILE *mStream = NULL;
    if((mStream = fopen(m_sfilename, "wb")))
    {  
    //write bitmap file header
    fwrite(&bmBITMAPFILEHEADER, sizeof(BITMAPFILEHEADER), 1, mStream);
    //write bitmap info
    fwrite(&(RGB16BitsBITMAPINFO.bmiHeader), sizeof(BITMAPINFOHEADER), 1, mStream);
    //write bitmap pixels data
    fwrite(lpBitmapBits, 2*width*height, 1, mStream);
    //close file
    fclose(mStream);
    }
      

  2.   

    BmpHead bmphead;    bmphead.bfType = 0x4D42;
    bmphead.bfSize = vff_rawsize+sizeof(Bmphead);//FileSize
    bmphead.bfReserved1 = 0;
    bmphead.bfReserved2 = 0;
    bmphead.bfOffBits = sizeof(BmpHead);
    bmphead.biSize = 0x28;
    bmphead.biWidth = vff_pixelsize[0];//width
    bmphead.biHeight = vff_pixelsize[1]; //height
    bmphead.biPlanes = 1; 
    bmphead.biBitCount = 16; 
    bmphead.biCompression = 0; 
    bmphead.biSizeImage = vff_rawsize;//ImageSize
    bmphead.biXPelsPerMeter = 0;
    bmphead.biYPelsPerMeter = 0;
    bmphead.biClrUsed = 0;
    bmphead.biClrImportant = 0;FILE* fp=fopen("E:\\练习\\sf0100802_RCC_150_ROI.bmp", "wb");if (fp == NULL)
    {
    cout<<"Failed to open file for write.";
    return 0;}fwrite((void*)&bmphead,sizeof(bmphead),1,fp);
    fwrite(Image_Data, 2*vff_pixelsize[0]*vff_pixelsize[1], 1, fp);//vff_pixelsize[0]和vff_piexelsize[1]分别为宽和高
    fclose(fp);这样好像不行啊!!
    显示没有预览,我是新手,这个我自己弄了两天,没进展。
    所以来这里求助。
      

  3.   

    用CXIMAGE类可以直接转换http://www.codeproject.com/bitmap/cximage.asp