Win GDI. Делаю скриншот, а на нем отсутствуют полупрозрачные объекты.

Тема в разделе "WASM.BEGINNERS", создана пользователем Span, 6 янв 2010.

  1. Span

    Span New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2006
    Сообщения:
    134
    Добрый день!

    Нужно сделать снимок рабочего стола. Делаю средствами Win GDI.
    Все работает отлично, но "полупрозрачные" окошки не попадают в результирующее изображение (
    Причем если сделать просто "Prnt Scr" и затем "Ctrl+V" в Paint - все видно.

    Подскажите, п-та, почему полупрозрачные объекты не попадают на мой скриншот?

    Ниже код, которым я снимаю скриншот и получаю данные bitmap'а в памяти:

    Код (Text):
    1.     HDC hdcScreen = CreateDC("DISPLAY", NULL, NULL, NULL); // get a Display DC
    2.     HBITMAP OffscrBmp = CreateCompatibleBitmap(hdcScreen, ScreenW, ScreenH); // make a bmp in memory to store the capture in
    3.     HDC OffscrDC = CreateCompatibleDC(hdcScreen) ;
    4.     HBITMAP OldBmp = (HBITMAP)SelectObject(OffscrDC, OffscrBmp);
    5.     BitBlt(OffscrDC, 0, 0, ScreenW, ScreenH, hdcScreen, 0, 0, SRCCOPY);
    6.  
    7.     // create BITMAPINFO with params needed
    8.     BITMAPINFO bmpinfo;
    9.     memset(&bmpinfo.bmiHeader, 0, sizeof(BITMAPINFOHEADER));
    10.     bmpinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    11.     bmpinfo.bmiHeader.biWidth = ScreenW;
    12.     bmpinfo.bmiHeader.biHeight = -ScreenH;
    13.     bmpinfo.bmiHeader.biBitCount = 32;
    14.     bmpinfo.bmiHeader.biPlanes = 1;
    15.     bmpinfo.bmiHeader.biCompression = BI_RGB;
    16.     if((!GetDIBits(OffscrDC,OffscrBmp, 0, ScreenH, NULL, &bmpinfo, DIB_RGB_COLORS)) || // call carefully
    17.         (bmpinfo.bmiHeader.biHeight != (-ScreenH)) ||
    18.         (bmpinfo.bmiHeader.biWidth != ScreenW) ||
    19.         (bmpinfo.bmiHeader.biBitCount != 32) ||
    20.         (bmpinfo.bmiHeader.biPlanes != 1) ||
    21.         (bmpinfo.bmiHeader.biCompression != BI_RGB)){
    22.             return false; //something was wrong
    23.     }
    24.     // copy data
    25.     GetDIBits(OffscrDC,OffscrBmp, 0, ScreenH, (void *)RGBScreen , &bmpinfo, DIB_RGB_COLORS); // call carefully
    26.     // clear all
    27.     DeleteObject(OldBmp);
    28.     DeleteDC(OffscrDC);
    29.     DeleteObject(OffscrBmp);
    30.     DeleteDC(hdcScreen);
     
  2. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    добавьте к SRCCOPY - CAPTUREBLT
     
  3. Span

    Span New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2006
    Сообщения:
    134
    Спасибо, заработало!