我的数据文件是RGB值,而不是图像文件,怎样设置文件头和调色板来显示出位图,位图是8位,哪位高手能给个源程序,最好是VC的,谢谢!

解决方案 »

  1.   

    你的数据文件是RGB值?那么最少为16Bit的呀..怎么又变成了8Bit?8Bit的位数据是调色板索引号,RGB值保存在rgbQuad中~~~~~
    你的数据文件是否就是索引号啊?显示很容易的.
      

  2.   

    不要求速度的话就比较灵活一些,可以先按点画在一个DC上,然后在保存DC位图,否则你就要先研究RGB的组织方式,他的高度宽度,然后组织出一个位图,
    还有不清楚你是需要内存中的位图还是位图文件,别人给你代码也许也没用
      

  3.   


           
    DWORD dwSize = W*H;
    BITMAPFILEHEADER bmFH;
    int nPaletteEntries = 256;

    bmFH.bfType = 19778;
    bmFH.bfSize = (DWORD) ( sizeof(BITMAPFILEHEADER) + 
    sizeof(BITMAPINFOHEADER) +
    nPaletteEntries * sizeof(RGBQUAD)) +
    dwSize;
    bmFH.bfReserved1 = bmFH.bfReserved2 = 0;
    bmFH.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + 
    sizeof(BITMAPINFOHEADER) + 
    nPaletteEntries * sizeof(RGBQUAD);

    BITMAPINFO *FileBMP;
    char bmpBuf[2048];
    FileBMP = (BITMAPINFO *)bmpBuf;
    FileBMP->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    FileBMP->bmiHeader.biWidth = W;
    FileBMP->bmiHeader.biHeight = H;
    FileBMP->bmiHeader.biPlanes = 1;
    FileBMP->bmiHeader.biBitCount = 8;
    FileBMP->bmiHeader.biCompression = BI_RGB;
    FileBMP->bmiHeader.biSizeImage = 0;
    FileBMP->bmiHeader.biXPelsPerMeter = 0;
    FileBMP->bmiHeader.biYPelsPerMeter = 0;
    FileBMP->bmiHeader.biClrUsed = 0;
    FileBMP->bmiHeader.biClrImportant = 0;

    for( int k = 0; k < 256; ++k)
    {
    FileBMP->bmiColors[k].rgbBlue = (BYTE)k;
    FileBMP->bmiColors[k].rgbGreen = (BYTE)k;
    FileBMP->bmiColors[k].rgbRed = (BYTE)k;
    FileBMP->bmiColors[k].rgbReserved = 0;
    }

    // pDC->SelectPalette(pScrnPalette, FALSE);
    // pDC->RealizePalette();
    pDC->SetStretchBltMode(COLORONCOLOR);

    StretchDIBits((HDC)*pDC, 
    0, 0, W, H,
    0, 0, W, H,
    lpDest, FileBMP, DIB_RGB_COLORS, SRCCOPY);//
      

  4.   

    W是宽,H是高,lpDest是数据指针