![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Panel1.Handle - обработка изображения [D6, WinXP]
progress © (2004-10-27 18:28:00)У меня есть примерчик использования видеозахвата (DirectShow). Работает, выводит результат на панель ... А мне надо взять это изображение и поместить, например, в TImage, для дальнейщей обработки.
пробовал:
Image1.Canvas.Handle := GetDC(Panel1.Handle) - не выходит, а как мне всё таки решить данную проблему???
debuger (2004-10-28 15:02:00) [1]Вроде никак.
Например, можно рисовать на рабочем столе :) Он за пределы не уйдет.
progress (2004-10-28 10:07:00) [2]Возникла ещё одна проблемма:
а как бороться с тем, что когда панель находится не полностью на экране (точнее в её видимой части), при сохранении в файл изображения с битмамы, то картинка получается малось "обрезанная". Часть та которая была в видимой части экрана видна, а та которая выходила за её пределы просто ... белая?
debuger (2004-10-27 19:21:00) [3]Вроде так. С панельки кадр сдираю в битпаму.
var
srcDC, destDC: HDC;
hbm: HBITMAP;
currentFrame: Graphics.TBitMap;
begin
currentFrame := TBitMap.Create;
srcDC := GetDC( Panel1.Handle );
destDC := CreateCompatibleDC( srcDC );
// создаем битпам
hbm := CreateCompatibleBitMap( srcDC,
width,
height );
SelectObject( destDC, hbm );
// копируем содержимое
BitBlt( destDC, 0, 0, width, height,
srcDC, 0, 0, SRCCOPY );
currentFrame.Handle := hbm;
// используем текущий кадр сдертый в битмап
// после использования удаляем все лишнее
DeleteDC( destDC );
ReleaseDC( Panel1.Handle );
DeleteObject( hbm );
end;