CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 3 of 3
  1. #1
    Join Date
    May 1999
    Posts
    13

    Why "Invalid Parameter" for CreateDIBitmap ?

    I am trying to display a 24bit True Colour image, using a block of uncompressed BGR data.


    BITMAPINFO bitInfo;
    BITMAPINFOHEADER biH;
    HDC hdc, hdcdest;
    HBITMAP hbm, oldhbm;
    unsigned char *hPicPtr; // Holds bitmap data serially in 3 byte groups of Blue Green Red
    .
    .
    hdc = CreateCompatibleDC( hdcdest );
    hbm = CreateDIBitmap( hdc, &biH, CBM_INIT, hPicPtr, &bitInfo, DIB_RGB_COLORS );
    check=GetLastError();
    oldhbm = SelectObject(hdc, hbm);
    .




    The HBITMAP handle hbm is NULL after the CreateDIBitmap function has run, and GetLastError() returns 87 which is ROR_INVALID_PARAMETER. Have you any suggestions why the CreateDIBitmap function returns NULL ?



  2. #2
    Guest

    Re: Why "Invalid Parameter" for CreateDIBitmap ?

    what does your initialization of the bitInfo and biH structures look like? I have noticed that sometimes these functions don't work correctly if they have a 'size' member in the structure that has not been initialized since they can not tell what kind of memory block you have passed it without this size parameter being initialized

    HTH


  3. #3
    Join Date
    May 1999
    Posts
    13

    Initialisation of structures for CreateDIBitmap


    Hi HTH,

    Here is the structure initialisation:


    biH.biSize = bitInfo.bmiHeader.biSize = sizeof(BITMAPINFO);
    biH.biCompression = bitInfo.bmiHeader.biCompression = BI_RGB;
    biH.biBitCount = bitInfo.bmiHeader.biBitCount = 24;
    biH.biPlanes = bitInfo.bmiHeader.biPlanes = 1;
    biH.biSizeImage = bitInfo.bmiHeader.biSizeImage = 0;
    biH.biClrImportant = bitInfo.bmiHeader.biClrImportant = 0;
    biH.biWidth = bitInfo.bmiHeader.biWidth = (long)(pcxheader.xmax - pcxheader.xmin);
    biH.biHeight = bitInfo.bmiHeader.biHeight = -(long)(pcxheader.ymax - pcxheader.ymin);
    biH.biXPelsPerMeter = bitInfo.bmiHeader.biXPelsPerMeter = 0L;
    biH.biYPelsPerMeter = bitInfo.bmiHeader.biYPelsPerMeter = 0L;
    biH.biClrUsed = bitInfo.bmiHeader.biClrUsed = 0L;
    biH.biClrImportant = bitInfo.bmiHeader.biClrImportant = 0L;




    The values I get in debug are:
    biSize = 44
    biCompression = 0
    biBitCount = 24
    biPlanes = 1
    biSizeImage = 0 (also tried with bitmap size of 1601808)
    biClrImportant = 0;
    biWidth = 883
    biHeight = -603 (negative for top down bitmap)
    biXPelsPerMeter = 0
    biYPelsPerMeter = 0
    biClrUsed = 0
    biClrImportant = 0

    I used two structures in case I was not presenting the address of the second parameter
    in the function CreateDIBitmap correctly.

    Could it be because bmiColors != 0 in the BITMAPINFO structure ?


Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured