CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 2 of 2
  1. #1
    Join Date
    Jul 2010
    Posts
    11

    Question GetDIBits returning senseless rgb values

    Ok, im trying with GetDIBits but i cant make it work.
    It always returns senseless values.
    I think im missing the purpose of HDC here. Can someone explain this please? I mean, what's it for???
    Note:
    1) The image is a screenshot which i take just before running the code by pressing 'PrtScreen' button on the keyboard.
    2) GetDIBits scans line 500 which, since im on a resolution of 1280x1024, is approximately in the middle of the screen.
    3) Color depth is 32bits.
    Code:
    #include <iostream>
    #include <windows.h>
    
    using namespace std;
    
    int main()
    {
    
        HBITMAP hBitmap;
    
        if (OpenClipboard(NULL))
        {
            hBitmap = (HBITMAP)GetClipboardData(CF_DIB);
            if (hBitmap == NULL)
            {
                cout << "Failed to get the clipboard data.";
                return 0;
            }
        }
        else
        {
            cout << "Failed to open the clipboard!";
            return 0;
        }
    
        HDC hdc=CreateCompatibleDC(NULL);
    
        BITMAPINFO bmi;
        bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
        bmi.bmiHeader.biWidth = 1280;
        bmi.bmiHeader.biHeight = 1;
        bmi.bmiHeader.biPlanes = 1;
        bmi.bmiHeader.biBitCount = 32;
        bmi.bmiHeader.biCompression = BI_RGB;
        bmi.bmiHeader.biSizeImage = 0;
        bmi.bmiHeader.biXPelsPerMeter = 0;
        bmi.bmiHeader.biYPelsPerMeter = 0;
        bmi.bmiHeader.biClrUsed = 0;
        bmi.bmiHeader.biClrImportant = 0;
        BYTE scanned[4*1280];
    
        int returnValue = GetDIBits(hdc,hBitmap,500,1,scanned,&bmi,DIB_RGB_COLORS);
    
        int r = scanned[2401];
        int g = scanned[2402];
        int b = scanned[2403];
    
        cout << "returnValue = " << returnValue << "\n";
        cout << "r = " << r << "\n";
        cout << "g = " << g << "\n";
        cout << "b = " << b << "\n";
    
        CloseClipboard();
        return 0;
    }

  2. #2
    Join Date
    Feb 2009
    Location
    Portland, OR
    Posts
    1,488

    Re: GetDIBits returning senseless rgb values

    Why do you need to call GetDIBits()? Your bitmap RGB values are returned to you when you call GetClipboardData(CF_DIB);

    CF_DIB = A memory object containing a BITMAPINFO structure followed by the bitmap bits.

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