Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
14-1133329515
Rentgen
2005-11-30 08:45
2005.12.25
InTouch


14-1133526001
nk
2005-12-02 15:20
2005.12.25
В продолжение "Помогите выбрать сотку"...


2-1133993052
Jerry
2005-12-08 01:04
2005.12.25
Компоненты Делфи Помогите кто может


2-1134100759
root911
2005-12-09 06:59
2005.12.25
Компонент


14-1133349455
Post
2005-11-30 14:17
2005.12.25
Framework SDK





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