BITMAPINFO * lpbmi = new BITMAPINFO现在我可以填充 lpbmi->bmiHeader;但是我怎么给 lpbmi->bmiColors 赋值呢?我用下面的方法不成功。RGBQUAD rgbArray[256];
for(int i = 0; i< 256; i++)
{
    rgbArray[i].rgbBlue = i;
    rgbArray[i].rgbGreen = i;
    rgbArray[i].rgbRed = i;
    rgbArray[i].rgbReserved = 0;
}//lpbmi->bmiColors = rgbArray[0];  这样不行
//lpbmi->bmiColors = rgbArray;    这样也不行应该怎么样呢?

解决方案 »

  1.   

    参考:
    void CCreateRandomBMPDlg::OnBtnCreateBMP()
    {
    CDC dc;
    dc.CreateDC("DISPLAY", NULL, NULL, NULL);
    CBitmap bm;
    int Width = 800;//指定图片宽度
    int Height = 600;//指定图片高度
    bm.CreateCompatibleBitmap(&dc, Width, Height);
    CDC tdc;
    tdc.CreateCompatibleDC(&dc);
    CBitmap* pOld = tdc.SelectObject(&bm);
    tdc.BitBlt(0, 0, Width, Height, &dc, 0, 0, SRCCOPY);
    tdc.SelectObject(pOld); BITMAP btm;
    bm.GetBitmap(&btm);
    DWORD size = btm.bmWidthBytes* btm.bmHeight;
    LPSTR lpData = (LPSTR) GlobalAllocPtr(GPTR, size);
    /////////////////////////////////////////////
    /////////////////////////////////////////////
    BITMAPINFOHEADER bih;
    bih.biBitCount = btm.bmBitsPixel;
    bih.biClrImportant = 0;
    bih.biClrUsed = 0;
    bih.biCompression = 0;
    bih.biHeight = btm.bmHeight;
    bih.biPlanes = 1;
    bih.biSize = sizeof(BITMAPINFOHEADER);
    bih.biSizeImage = size;
    bih.biWidth = btm.bmWidth;
    bih.biXPelsPerMeter = 0;
    bih.biYPelsPerMeter = 0;
    ///////////////////////////////////
    GetDIBits(dc, bm, 0, bih.biHeight, lpData, (BITMAPINFO *) &bih,
    DIB_RGB_COLORS);
    // bm.GetBitmapBits(size,lpData); //此函数在处理5-5-5模式的16位色下会出现颜色混乱
    //////////////////////////////
    //修改RGB值
    int nWidth = btm.bmWidth * 4;
    for (int i = 0; i < btm.bmHeight; i++)
    {
    for (int j = 0; j < btm.bmWidth; j++)
    {
    lpData[i * nWidth + j * 4 + 2] = GetRandomRGBValue(); //R
    lpData[i * nWidth + j * 4 + 1] = GetRandomRGBValue(); //G
    lpData[i * nWidth + j * 4] = GetRandomRGBValue(); //B
    TRACE("\nR = %d; G = %d; B = %d\n",
    lpData[i * nWidth + j * 4 + 2],
    lpData[i * nWidth + j * 4 + 1], lpData[i * nWidth + j * 4]);
    }
    } static int filecount = 0;
    CString name;
    name = "D:\\Test.bmp";//m_Path+name;
    BITMAPFILEHEADER bfh;
    bfh.bfReserved1 = bfh.bfReserved2 = 0;
    bfh.bfType = ((WORD) ('M' << 8) | 'B');
    bfh.bfSize = 54 + size;
    bfh.bfOffBits = 54; CFile bf;
    if (bf.Open(name, CFile::modeCreate | CFile::modeWrite))
    {
    bf.WriteHuge(&bfh, sizeof(BITMAPFILEHEADER));
    bf.WriteHuge(&bih, sizeof(BITMAPINFOHEADER));
    bf.WriteHuge(lpData, size);
    bf.Close();
    }
    GlobalFreePtr(lpData);
    AfxMessageBox("Create BMP File Over!");
    }
      

  2.   

    这是一个创建随机象素的的BMP文件!GetRandomRGBValue()是一个返回随机数的函数,0~255之间的。帮助支持一下:
    http://community.csdn.net/Expert/topic/3768/3768074.xml?temp=.1562921