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

Вниз

Как получить снимок экрана на API?   Найти похожие ветки 

 
NikNet ©   (2005-08-17 18:26) [0]

На читом АПИ?


 
Игорь Шевченко ©   (2005-08-17 18:28) [1]

BitBlt


 
NikNet ©   (2005-08-17 18:32) [2]

Игорь Шевченко ©   (17.08.05 18:28) [1]
А можно подробней а лучше пример :)


 
KilkennyCat ©   (2005-08-17 18:58) [3]

Подробно написано в справке "Win32 SDK reference", пример излишен, так как будет одна строчка, которая уже в справке есть, хоть и в виде столбца.


 
NikNet ©   (2005-08-17 19:01) [4]

А мне надо ещё его в Jpeg перевести?


 
KilkennyCat ©   (2005-08-17 19:08) [5]


> [4] NikNet ©   (17.08.05 19:01)


фифти-фифти. Либо надо, либо не надо. Причем здесь мы?


 
Kerk ©   (2005-08-18 09:26) [6]

Программа делает скриншот экрана в формате Jpg.
Писалась на "скорую руку" ..

http://kladovka.net.ru/index.cgi?pid=list&rid=81


 
alpet ©   (2005-08-18 11:16) [7]

Вообще скриншоты лучше cжимаются png - без потерь, и меньше размером получается. По прежнему  остается не выясненой проблема с   фотографированием  полупрозрачных окон (WS_EX_LAYERED), хотя программа magnify (поставляется с Windows) успешно с ними справляется, посредством GetDC (0), BitBlt (насколько я смог выяснить через отладчик).


 
NikNet ©   (2005-08-18 17:19) [8]

Помогите сохранить в файл...

program ScrShop;
uses
 Windows,
 Messages;

Function ApiScrCapture(FileName:String):HDC;
Type
 TScr = array [0..10000000*3] of Byte;
 PScr =  ^TScr;
var
 TBmp     : TBitmap;
 hBmp     : hBitmap;
 DeskDC   : hDC;
 DC       : hDC;
 BmpInfo  : tagBitmapInfo;
 ScrX,ScrY: Integer;
 F        : File;
 ScrSize  : Cardinal;
 Bits     : PScr;
begin
 GetMem(Bits,ScrSize);
 SCRX     := GetSystemMetrics(SM_CXSCREEN);
 SCRY     := GetSystemMetrics(SM_CYSCREEN);
 ScrSize  := ScrX*ScrY*3;
 New(bits);

 DeskDC   := GetWindowDC(GetDesktopWindow);
 hBmp     := CreateCompatibleBitmap(deskdc,ScrX,ScrY);
 DC       := CreateCompatibleDC(DeskDC);

 SelectObject(dc,hbmp);
 BitBlt(Dc,0,0,SCRX,SCRY,deskdc,0,0,SrcCopy);

 BmpInfo.bmiHeader.biSize:=sizeof(tagBitmapInfoHeader);
 BmpInfo.bmiHeader.biBitCount:=0;
 GetDiBits(DeskDC,hBmp,0,SCRY,nil,BmpInfo,DIB_RGB_COLORS);

 BmpInfo.bmiHeader.biWidth:=SCRX;
 BmpInfo.bmiHeader.biHeight:=SCRY;
 BmpInfo.bmiHeader.biPlanes:=1;
 BmpInfo.bmiHeader.biBitCount:=24;
 BmpInfo.bmiHeader.biCompression:=BI_RGB;
 BmpInfo.bmiHeader.biSizeImage:=ScrSize;
 BmpInfo.bmiHeader.biClrImportant:=0;

 GetDiBits(DeskDC,hbmp,0,SCRY,Bits,BmpInfo,DIB_RGB_COLORS);
 DeleteObject(hbmp);
 Result:=DeskDC;
//------- Что то несохраняется :( -------//
 AssignFile(F,FileName);
 Rewrite(F,1);
 Blockwrite(F,bits^,ScrSize);
 closeFile(F);
 FreeMem(Bits,ScrSize);
end;

begin
 ApiScrCapture("1.bmp");
end.


 
TheVadim   (2005-08-26 17:51) [9]

NikNet, TBitmap-a нету же в модулях Windows, Messages;


 
lifedest   (2005-10-17 20:00) [10]

Только нашел от CyberNETic (будем пробовать):
Пишешь в обработчике события (например Button1.Click)  следующее:

 bmp := TBitmap.Create;
 bmp.Width := screen.Width;
 bmp.Height := screen.Height;
 dc := GetDC(0);
 BitBlt(bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, dc, 0, 0, SRCCOPY);
 ReleaseDc(0, dc);
 bmp.SaveToFile("screenshot.bmp");
 bmp.Free;

Если надо скопировать на форму, то поменяй bmp на Form1 (или как она у тебя называется). Тогда строчка bmp.SaveToFile("screenshot.bmp"); не нужна.
Не забудь объявить переменные:
 var bmp: TBitmap;  
      dc:    Hdc;


 
xoresk ©   (2005-10-24 07:05) [11]

program ScrShop;//вот так
uses
Windows,
Messages;

Type
TScr = array [0..10000000*3] of Byte;
PScr =  ^TScr;
var
TBmp     : TBitmap;
hBmp     : hBitmap;
DeskDC   : hDC;
DC       : hDC;
BmpInfo  : tagBitmapInfo;
ScrX,ScrY: Integer;
F        : File;
ScrSize  : Cardinal;
Bits     : PScr;
begin
GetMem(Bits,ScrSize);
SCRX     := GetSystemMetrics(SM_CXSCREEN);
SCRY     := GetSystemMetrics(SM_CYSCREEN);
ScrSize  := ScrX*ScrY*3;
New(bits);

DeskDC   := GetWindowDC(GetDesktopWindow);
hBmp     := CreateCompatibleBitmap(deskdc,ScrX,ScrY);
DC       := CreateCompatibleDC(DeskDC);

SelectObject(dc,hbmp);
BitBlt(Dc,0,0,SCRX,SCRY,deskdc,0,0,SrcCopy);

BmpInfo.bmiHeader.biSize:=sizeof(tagBitmapInfoHeader);
BmpInfo.bmiHeader.biBitCount:=0;
GetDiBits(DeskDC,hBmp,0,SCRY,nil,BmpInfo,DIB_RGB_COLORS);

BmpInfo.bmiHeader.biWidth:=SCRX;
BmpInfo.bmiHeader.biHeight:=SCRY;
BmpInfo.bmiHeader.biPlanes:=1;
BmpInfo.bmiHeader.biBitCount:=24;
BmpInfo.bmiHeader.biCompression:=BI_RGB;
BmpInfo.bmiHeader.biSizeImage:=ScrSize;
BmpInfo.bmiHeader.biClrImportant:=0;

GetDiBits(DeskDC,hbmp,0,SCRY,Bits,BmpInfo,DIB_RGB_COLORS);
DeleteObject(hbmp);
Result:=DeskDC;

AssignFile(F,FileName);
Rewrite(F,1);
Blockwrite(F,bits^,ScrSize);
closeFile(F);
FreeMem(Bits,ScrSize);
//осталось только заголовок bmp приделать

end.


 
xoresk ©   (2005-10-24 07:07) [12]

Помогаю сохранить в файл

program ScrShop;//вот так
uses
Windows,
Messages;

Type
TScr = array [0..10000000*3] of Byte;
PScr =  ^TScr;
var
TBmp     : TBitmap;
hBmp     : hBitmap;
DeskDC   : hDC;
DC       : hDC;
BmpInfo  : tagBitmapInfo;
ScrX,ScrY: Integer;
F        : File;
ScrSize  : Cardinal;
Bits     : PScr;
begin
GetMem(Bits,ScrSize);
SCRX     := GetSystemMetrics(SM_CXSCREEN);
SCRY     := GetSystemMetrics(SM_CYSCREEN);
ScrSize  := ScrX*ScrY*3;
New(bits);

DeskDC   := GetWindowDC(GetDesktopWindow);
hBmp     := CreateCompatibleBitmap(deskdc,ScrX,ScrY);
DC       := CreateCompatibleDC(DeskDC);

SelectObject(dc,hbmp);
BitBlt(Dc,0,0,SCRX,SCRY,deskdc,0,0,SrcCopy);

BmpInfo.bmiHeader.biSize:=sizeof(tagBitmapInfoHeader);
BmpInfo.bmiHeader.biBitCount:=0;
GetDiBits(DeskDC,hBmp,0,SCRY,nil,BmpInfo,DIB_RGB_COLORS);

BmpInfo.bmiHeader.biWidth:=SCRX;
BmpInfo.bmiHeader.biHeight:=SCRY;
BmpInfo.bmiHeader.biPlanes:=1;
BmpInfo.bmiHeader.biBitCount:=24;
BmpInfo.bmiHeader.biCompression:=BI_RGB;
BmpInfo.bmiHeader.biSizeImage:=ScrSize;
BmpInfo.bmiHeader.biClrImportant:=0;

GetDiBits(DeskDC,hbmp,0,SCRY,Bits,BmpInfo,DIB_RGB_COLORS);
DeleteObject(hbmp);
Result:=DeskDC;

AssignFile(F,FileName);
Rewrite(F,1);
Blockwrite(F,bits^,ScrSize);
closeFile(F);
FreeMem(Bits,ScrSize);
//осталось только заголовок bmp приделать

end.


 
xoresk ©   (2005-10-24 07:08) [13]

Че то я увлекся :)



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

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

Наверх




Память: 0.5 MB
Время: 0.041 c
14-1133527749
Максим
2005-12-02 15:49
2005.12.25
Все решено


2-1133867414
it_work
2005-12-06 14:10
2005.12.25
Отправка сообщения из файла по сети


2-1134121057
De
2005-12-09 12:37
2005.12.25
Почему Incompatible types: Integer and Pointer ?


4-1129894565
shc
2005-10-21 15:36
2005.12.25
Отключение Alt+Tab под ХР


2-1134331158
San1
2005-12-11 22:59
2005.12.25
PictureBox