Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];

Вниз

Как сграбить экран ... ?   Найти похожие ветки 

 
WM.DIGGER ©   (2004-03-16 08:20) [0]

Возник вопрос, как сграбить изображение всего экрана и сохранить его в файл?
Вопрос кажется очень простым на первый взгляд и реализуется очень просто:


var DC:HDC;
   BMP:TBitMap;
begin
DC := GetDC(0);
BMP := TBitMap.Create;
BMP.Width := Screen.Width;
BMP.Height := Screen.Height;
BMP.PixelFormat := pf24bit;
BitBlt(BMP.Canvas.Handle,0,0,BMP.Width,BMP.Height,DC,0,0,SRCCOPY);
BMP.SaveToFile("имя файлы");
BMP.Free;
ReleaseDC(0,DC);
end;


А вот тут и начинается проблема! Сохраняется изображение всего экрана, НО если работает Windows Media Player, то изображение того что в нём воспроизводиться НЕ СОХРАНЯЕТСЯ!

ВОПРОС: Как сохранить изображение, которое находиться в Windows Media Player"e, т.е. что бы картинка которая находиться в данный момент в WM Player"e сохранялась вместе с изображением остального экрана ?


 
Dr.Null   (2004-03-16 19:13) [1]

ИМХО, это невожможно даже теоретически, PrintScreen"он изображение WMP тоже не снимается. WMP воспроизводит видео в overlay-режиме (чо это такое я и сам не знаю), такие изображение даже не отображаются на телевизоре, подключенном как второй дисплей. Так что (опять же ИМХО), чтобы это сграбить, надо грабить на уровне DirectX (как, не знаю). Если интересует просто снятие скриншотов с видео, то используй BSPlayer, там есть функция снятия скриншотов. А если хочется самому, то отключи в BSPlayer overlay-режим и грабь своей прогой. Может и WMP можно отключить overlay-режим, тока я не знаю как.

Удачи!


 
at   (2004-03-16 19:21) [2]

не только WMPlayer а любой DirectShow вывод не виден


 
at   (2004-03-16 19:26) [3]

Dr.Null
на телевизоре видно
и оверлей тут вообще не при чём


 
Mihey ©   (2004-03-16 20:08) [4]

Если вывод через DirectX -> DirectShow, то вполне логично, что надо использовать DirectX и для копирования экрана. Вот здесь написано, как сделать это в том числе и через DirectX:

http://www.geocities.com/krishnapg/screencap.html


 
Dr.Null   (2004-03-16 21:12) [5]


> Dr.Null
> на телевизоре видно
> и оверлей тут вообще не при чём


Не хочется оффтопик разводить, но лично у меня на телевизор оверлеи не выводятся.


 
Guest ©   (2004-03-23 19:55) [6]

Да давно интересует нас эта тема...
http://www.geocities.com/krishnapg/screencap.html
работает на уровне get.frontbuffer копируем только часть экрана avi опять в пролете
для копирования Windows Media Player
надо копаться в свойсвах\ directdraw\ отключить перекрытия... и т.д. четыре первых чекбокса и тогда копироваться будет осуществлять api функциями и спомощью direct3d...


 
Mihey ©   (2004-03-23 23:02) [7]

Как насчёт Windows Media API по той же ссылке?


 
WM.DIGGER ©   (2004-04-03 15:32) [8]

to [Dr.Null] нет ни чего невозможного :)))

to [Guest] самы первый пример на странице http://www.geocities.com/krishnapg/screencap.html копирует ВСЁ !!! включая то что в данный момент воспроизводиться в Windows Media Player"е, круто :)))

to [Mihey] логично что если DirectX то надобы юзать именно его :) Однако винды вешь нелогичная :) Все плеера подобные WMP юзают DirectShow это так, однако базовая поверхность на которую кидается изображение (PRIMARY_SURFACE) всё равно связана с хэндлом экрана, тут главное было найти правильный HDC :)

Короче, всем кому интерестно, вот пример на Delphi - грабит весь экран, включая всё что находиться в Windows Media Player"е например ... (на основе http://www.geocities.com/krishnapg/screencap.html)


var RegionWidth,RegionHeight:Integer;
   DesktopWnd:HWND;
   DesktopDC:HDC;
   CaptureBitmap:TBitMap;
begin
RegionWidth := Screen.Width;
RegionHeight := Screen.Height;
DesktopWnd := GetDesktopWindow();
DesktopDC := GetDC(DesktopWnd);
CaptureBitmap := TBitMap.Create;
CaptureBitmap.Width := RegionWidth;
CaptureBitmap.Height := RegionHeight;
CaptureBitmap.PixelFormat := pf24bit;
BitBlt(CaptureBitmap.Canvas.Handle,0,0,RegionWidth,RegionHeight,DesktopDC,0,0,SRCCOPY);
CaptureBitmap.SaveToFile("c:\123.bmp"); // сохраняем :)
CaptureBitmap.Free;
ReleaseDC(DesktopWnd,DesktopDC);
end;


Всем удачи!



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.032 c
1-1085937280
nester
2004-05-30 21:14
2004.06.13
Как из dll-ки узнать имя файла dll-ки?


3-1085147565
V l a d i m i r
2004-05-21 17:52
2004.06.13
База данных и TreeView


1-1085773815
DIS
2004-05-28 23:50
2004.06.13
ориентацию бумаги перед печатью


1-1085970696
borg
2004-05-31 06:31
2004.06.13
Работа с файлами


3-1085140690
Tomkat
2004-05-21 15:58
2004.06.13
IBX взбесился ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский