Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > захват изображения из TPanel


Автор: Leopard255 29.5.2013, 13:10
пытаюсь получить изображение из TPanel, вместо ожидаемого получаю серый фон с надписью "Panel" посередине smile 
в чем может быть дело?  (на других приложениях код работает)

Код

        HDC hdcSrc = GetWindowDC(m_handlePanel); 
        RECT* windowRect = new RECT();
        GetClientRect(handlePanel, windowRect);
        HDC pDest = CreateCompatibleDC(hdcSrc);
        int iWidth = windowRect->right - windowRect->left;
        int iHeight = windowRect->bottom - windowRect->top;
        HBITMAP pDestPicture = ::CreateCompatibleBitmap(hdcSrc, iWidth, iHeight);
        HGDIOBJ oldOBJ = ::SelectObject(pDest, pDestPicture);
        ::BitBlt(pDest, 0, 0, iWidth, iHeight, hdcSrc, 0, 0, SRCCOPY);

Автор: Alexeis 29.5.2013, 13:16
  Чтобы узнать что происходит не так, нужно увидеть как оно происходит smile

Автор: Leopard255 29.5.2013, 13:22
правда код не паскалевский, сюда написал потому что окно(TPanel)  дельфийское 

Автор: Alexeis 29.5.2013, 13:27
  Рисунок каким образом попадает на панельку?

Автор: Leopard255 29.5.2013, 13:31
точно не известно, а какие есть варианты?

Автор: Alexeis 29.5.2013, 13:37
Может там DirectX окно какое нить или одно окно поверх другого с рисунком или форма прозрачная и проглядывает рисунок снизу. В общем если рисуют при помощи GDI то точно должно копироваться, а остальное нужно думать.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51a5d4786ccc19683b000002#findElement_E7045_51a5da7b6ccc1976130017b5_0

Автор: Leopard255 29.5.2013, 13:44
рисуется с помощью OpenGL

в приложении только родительское окно и TPanel в нем.

Автор: Alexeis 29.5.2013, 13:51
Насколько я помню, перед копированием с OpenGL контекста его нужно освобождать.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51a5d4786ccc19683b000002#findElement_E7045_51a5ddb96ccc193d2f000a19_0

Автор: Leopard255 29.5.2013, 13:54
фрапс  делает правильные скриншоты этого окна.

как освободить контекст "чужого окна" ?

Автор: Alexeis 29.5.2013, 14:29
Если даже это получиться сделать, то дальше чужое окно начнет работать нестабильно. Я думал, что для своего окна делать скриншот. Не уверен, что получиться простыми средствами решить этот вопрос.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51a5d4786ccc19683b000002#findElement_E7045_51a5e6966ccc197613001c62_0

Автор: Alexeis 29.5.2013, 14:55
Фрапс возможно делает перехваты вызовов функций графических библиотек для такого копирования.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51a5d4786ccc19683b000002#findElement_E7045_51a5ecad6ccc1976130021ac_0

Автор: Leopard255 29.5.2013, 15:25
а можно перенести эту тему в "Программирование -> C++ -> C/C++: Мультимедия, OpenGL/DirectX (еще)" ?
Может там кто знает.

Автор: kami 29.5.2013, 15:26
пробуй 
Код

BitBlt(pDest, 0, 0, iWidth, iHeight, hdcSrc, 0, 0, SRCCOPY or CAPTUREBLT);

Автор: Leopard255 29.5.2013, 15:49
не помогает

Автор: BorisVorontsov 19.6.2013, 15:42
Цитата(Leopard255 @  29.5.2013,  13:44 Найти цитируемый пост)
рисуется с помощью OpenGL

Есть доступ к коду OpenGL? Если есть, тогда там следует вызвать glReadPixels с последующей передачей в CreateBitmap

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)