Menangkap Gambar Desktop

WinSnap_delphi_snapshot_screen_capture

WinSnap_delphi_snapshot_screen_capture

Atau, yang biasa disebut screen capture. Di Delphi, agar tidak menurunkan kualitas gambar hasil capture/snapshot, biasanya digunakakn TBitmap untuk menampung hasilnya. Nanti baru diubah ke format gambar lain yang diinginkan.

Tiap-tiap window di Windows memiliki handlenya sendiri, berupa bilangan bulat bertipe Dword (4 byte). Dekstop pun adalah sebuah window. Bila kita mengetahui handle sebuah window, kita dapat mengambil device context-nya (DC) berupa sebuah handle lain bertipe HDC (Handle of Device Context). Dari handle DC inilah, kita dapat mengcopy isi DC tersebut ke Bitmap.

Delphi mempermudah kita mengakses dan mengelola DC dengan sebuah class bernama TCanvas. Di atas TCanvas ini kita dapat menggambar, membuat teks, membuat efek-efek visual, ataupun menyalin dari dan ke Canvas lain.

Berikut potongan kode untuk mengambil handle window Desktop, mengambil handle DC (HDC)-nya dan mengcopynya ke TBitmap, dan menampilkannya pada sebuah TImage di atas Form.


function TFMain.SnapDesktop: TBitmap;
var
DC: TCanvas;
HDesk: THandle;
HCanvas: HDC;
w, h: integer;
begin
HDesk := GetDesktopWindow;
RefreshDesktop;
DC:= TCanvas.Create;
Result := TBitmap.Create;
try
dc.Handle := GetWindowDC(hdesk);
w := Screen.Width;
h := Screen.Height;
Result.Width := w;
Result.Height := h;
BitBlt(Result.Canvas.Handle, 0,0,w, h, dc.Handle, 0, 0, SRCCOPY);
finally
DC.Free;
end;
end;

Pada kode di atas, kita temui beberapa fungsi:

  • GetDesktopWindow() untuk mengambil handle desktop Windows.
  • GetWindowDC(handleWindow) untuk mengambil handle device context, dalam hal ini desktop Windows.
  • BitBlt() untuk mengcopy isi sebuah device context (DC) ke device context lainnya. Dalam contoh di atas, mengcopy dari DC desktop ke DC Bitmap.

Fungsi SnapDesktop di atas mengembalikan sebuah instance Bitmap yang kemudian dapat ditampilkan ke TImage, di-save ke file, atau diubah ke format gambar lainnya. Dalam contoh ini, Bitmap diubah ke gambar JPG (TJPEGImage) dengan kode berikut:


jpg :=Ā  TJPEGImage.Create;
try
jpg.Assign(VariabelBitmap);
jpg.SaveToFile(NamaFile);
finally
jpg.Free;
end;

Dalam contoh kode yang tersedia untuk didownload, juga tersedia sebuah fungsi untuk memotong gambar sehingga hanya bagian tertentu saja yang diambil.

Berikut tampilan contoh aplikasi:

Download

Silahkan download WinSnap:

WinSnap Binary – 730KB
WinSnap Binary (7Zipped) – 280KB
WinSnap Source (7Zipped) – 20KB

UPDATE:

WinSnap Binary + Source (7Zipped) – 300KB. Telah ditambahkan fungsi snap window tertentu.

6 thoughts on “Menangkap Gambar Desktop

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s