Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.13;
Скачать: CL | DM;

Вниз

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

 
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 вся ветка

Текущий архив: 2004.06.13;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.036 c
3-1084952705
юрок
2004-05-19 11:45
2004.06.13
Приявзка 2 картинок к дбгриду


1-1085983350
DmitryNekl
2004-05-31 10:02
2004.06.13
Сохранение формы в файл и чтение из файла


6-1082774639
Graf
2004-04-24 06:43
2004.06.13
Счетчик траффика


14-1085800307
Думкин
2004-05-29 07:11
2004.06.13
С днем рождения! 29 мая


3-1083214133
kvit
2004-04-29 08:48
2004.06.13
Чем ADO лучше BDE и как с этим бороться?! :(((





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский