Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> захват изображения из TPanel 
:(
    Опции темы
Leopard255
Дата 29.5.2013, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 15.3.2013

Репутация: нет
Всего: нет



пытаюсь получить изображение из 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);


Это сообщение отредактировал(а) Leopard255 - 29.5.2013, 13:18
PM MAIL   Вверх
Alexeis
Дата 29.5.2013, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 5
Всего: 459



  Чтобы узнать что происходит не так, нужно увидеть как оно происходит smile


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Leopard255
Дата 29.5.2013, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 15.3.2013

Репутация: нет
Всего: нет



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

Это сообщение отредактировал(а) Leopard255 - 29.5.2013, 13:22
PM MAIL   Вверх
Alexeis
Дата 29.5.2013, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 5
Всего: 459



  Рисунок каким образом попадает на панельку?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Leopard255
Дата 29.5.2013, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 15.3.2013

Репутация: нет
Всего: нет



точно не известно, а какие есть варианты?
PM MAIL   Вверх
Alexeis
Дата 29.5.2013, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 5
Всего: 459



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

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM ICQ Skype   Вверх
Leopard255
Дата 29.5.2013, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 15.3.2013

Репутация: нет
Всего: нет



рисуется с помощью OpenGL

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

Это сообщение отредактировал(а) Leopard255 - 29.5.2013, 13:46
PM MAIL   Вверх
Alexeis
Дата 29.5.2013, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 5
Всего: 459



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

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM ICQ Skype   Вверх
Leopard255
Дата 29.5.2013, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 15.3.2013

Репутация: нет
Всего: нет



фрапс  делает правильные скриншоты этого окна.

как освободить контекст "чужого окна" ?
PM MAIL   Вверх
Alexeis
Дата 29.5.2013, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 5
Всего: 459



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

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM ICQ Skype   Вверх
Alexeis
Дата 29.5.2013, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 5
Всего: 459



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

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM ICQ Skype   Вверх
Leopard255
Дата 29.5.2013, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 15.3.2013

Репутация: нет
Всего: нет



а можно перенести эту тему в "Программирование -> C++ -> C/C++: Мультимедия, OpenGL/DirectX (еще)" ?
Может там кто знает.
PM MAIL   Вверх
kami
Дата 29.5.2013, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: нет
Всего: 72



пробуй 
Код

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

PM MAIL WWW   Вверх
Leopard255
Дата 29.5.2013, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 15.3.2013

Репутация: нет
Всего: нет



не помогает
PM MAIL   Вверх
BorisVorontsov
Дата 19.6.2013, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

Репутация: 1
Всего: 10



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

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


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0919 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.