Форум: "WinAPI";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];
ВнизКак получить снимок экрана на 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.014 c