Pen gantar mukaan Komputer dan P er ala ta n Video Muhammad Iqbal Email:
[email protected] web: http://www.creative-instrument.com Pendahuluan Seakan berpacu dengan waktu, tak hentinya teknologi video camera telah begitu pesatnya berkembang, bahkan pada alat sekecil telepon genggampun, video camera telah mampu menempel dengan baik dan dengan kualitas yang sudah cukup memuaskan pengguna pada umumnya. Fenomena ini menyebabkan persaingan kualitas dan semakin murahnya harga sebuah camera video. Mengingat hal tersebut dimasa depan pemanfaatan terhadap teknologi ini akan menjadi suatu fenomena baru bagi para designer baik elektronika maupun perangkat lunak dalam membuat peralatan ini menjadi lebih berdaya guna tidak hanya sebagai perlatan perekam tetapi mampu memberikan fungsi-fungsi yang lebih. Pengantarmukaan peralatan-peralatan video ini dengan computer mungkin merupakan salah satu cara untuk memanfaatkan peralatan video camera ini menjadi lebih berdaya guna dan juga sebaliknya agar computer juga menjadi lebih berdaya guna dengan menempatkan peralatan seperti video camera ini. Sehingga akan dihasilkan karya-karya baru dari teknik-teknik pengantarmukaan ini.
Gambar. Berbagai Jenis WebCam dan Kamera Video Sistem pengaman rumah, video monitoring, system pengenalan wajah dan masih banyak lagi merupakan beberapa contoh aplikasi yang telah dikembangkan menggunakan komunikasi kedua perlatan ini. Video For Windows (VFW) Pada pengantarmukaan Komputer dengan peralatan video ini pada Delphi dibutuhkan penerjemah fungsi-fungsi yang ada dalam driver sebuah peralatan video yang kita miliki. Pada praktikum kali ini kita akan menggunakan unit yang bernama Video For Windows (VFW) karena selain free juga tidak kalah fasilitas dengan komponen-
komponen komersial. Unit “Vfw.Pas” ini adalah merupakan unit terjemahan dalam bahasa Pascal (Microsoft sendiri menyediakanya dalam bentuk Vfw.H untuk bahasa C/C++ ) untuk pengantarmukaan dari avifil32.dll yang merupakan kumpulan fungsi standar yang disediakan oleh Microsoft untuk mengakses beberapa peralatan video. Vfw.pas ini dapat anda download di http://www.swiftsoft.de/free/vfw.zip. Untuk diketahui bahwa penggunaan unit VFW ini selalu membutuhkan driver dari peralatan yang kita gunakan sehingga sebelum memulai semuanya sebaiknya anda menginstall terlebih dahulu driver dari peralatan yang anda gunakan. Koneksi VFW Seperti halnya unit lain untuk menngunakan unit VFW kita hanya perlu memasukanya ke dalam klausa uses. Dan untuk pertama kali kita perlu membuat sebuah handle dari window yang menampung capture yang akan dilakukan. Berikut cara membuat handle dan mengecek koneksi terhadap driver video. FCapWndHandle := capCreateCaptureWindow(' nama window ', WS_CHILD or WS_VISIBLE, titkxawal, titikyawal, lebar, tinggi, handle komponen penampil, 0); if capDriverConnect(FCapWndHandle, 0) then begin {****lakukan sesuatu bila driver tersambung, dibawah ini adalah salah satu pilihan yang sering dilakukan **********} { capOverlay(FCapWndHandle, True); capPreviewScale(FCapWndHandle, True); capPreview(FCapWndHandle, TRUE); capPreviewRate(FCapWndHandle, 50);} end else begin ShowMessage('No Capture Device'); end;
Pada komponen timer kodenya kira-kira seperti dibawah ini: capGrabFrame(FCapWndHandle); capEditCopy(FCapWndHandle); capOverlay(FCapWndHandle, TRUE); capPreview(FCapWndHandle, TRUE); capPreviewScale(FCapWndHandle, True);
Perintah diatas menghasilkan sebuah bitmap yang disimpan dalam clipboard untuk setiap framenya sehingga jika kita menangkapnya dalam sebuah bitmap setiap waktu maka akan menjadi sebuah video. Perintah untuk membuat dan menangkap bitmap dalam clipboard dan menampungnya dalam sebuat komponen TImage yaitu Image1 tersebut seperti berikut: Bitmap1 := TBitmap.Create; try Bitmap1.Assign(Clipboard); Image1.Picture.Bitmap.Width := Bitmap1.Width; Image1.Picture.Bitmap.Height := Bitmap1.Height;
Image1.Canvas.CopyRect(Rect(0, 0, Bitmap1.Width, Bitmap1.Height), Bitmap1.Canvas, Rect(0, 0, Bitmap1.Width, Bitmap1.Height)); finally Bitmap1.Free;
Untuk menjadikanya sebuah video tinggal kita menemptkan semua listing program diatas didalam sebuah komponen Timer. Projek: Sekarang setelah kita tahu cara mengkoneksikan unit VFW tersebut dan menampung hasilnya sekarang kita akan langsung mencoba untuk membuat sebuah aplikasi sederhana yaitu aplikasi yang dapat melakukan capture terhadap video yang ditampilkan dengan menekan tombol capture misalnya. Masukan beberapa komponen Delphi dan beri nilai sesuai dengan valuenya seperti pada daftar komponen dibawah ini yaitu: No 1 2
Komponen Panel1 Panel2
3
SpeedButton1
4
SpeedButton2
5
SpeedButton3 SpeedButton3
6
Image1
Properties BevelOuter BevelOuter Align AllowAllUp Caption GroupIndex AllowAllUp Caption GroupIndex AllowAllUp Caption AllowAllUp Caption Propotional Strecth
Value BvLowered BvLowered AlClient True Konek 2 True Capture 3 True Video Source True Video Format True True
Kemudian aturlah tampilanya seperti dibawah ini misalnya:
Berikut adalah listing lengkap dari program diatas: unit contohku; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls,vfw,clipbrd, Buttons, StdCtrls; type TForm1 = class(TForm) Panel1: TPanel; Timer1: TTimer; SpeedButton1: TSpeedButton; SpeedButton2: TSpeedButton; Panel2: TPanel; Image1: TImage; Button1: TButton; Button2: TButton; procedure SpeedButton1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; FCapWndHandle: HWND; implementation
{$R *.dfm} procedure TForm1.SpeedButton1Click(Sender: TObject); begin if TSpeedButton(Sender).Down then begin FCapWndHandle := capCreateCaptureWindow(' Capture ', WS_CHILD or WS_VISIBLE, 1, 1, 321, 241, Panel2.Handle, 0); if capDriverConnect(FCapWndHandle, 0) then begin capOverlay(FCapWndHandle, True); capPreviewScale(FCapWndHandle, True); capPreview(FCapWndHandle, TRUE); capPreviewRate(FCapWndHandle, 50); SpeedButton2.Enabled := True; end else begin ShowMessage('No Capture Device'); TSpeedButton(Sender).Down := False; end; end else begin capDriverDisconnect(FCapWndHandle); SpeedButton2.Enabled := False; end; end; procedure TForm1.Timer1Timer(Sender: TObject); var vRect1: TRect; xBitmap1: TBitmap; vWidth, vHeight: Integer; vAngle: Integer; begin if speedbutton2.Down then begin try Timer1.Enabled := False; capGrabFrame(FCapWndHandle); capEditCopy(FCapWndHandle); capOverlay(FCapWndHandle, TRUE); capPreview(FCapWndHandle, TRUE); capPreviewScale(FCapWndHandle, True); xBitmap1 := TBitmap.Create; try xBitmap1.Assign(Clipboard); Image1.Picture.Bitmap.Width := xBitmap1.Width; Image1.Picture.Bitmap.Height := xBitmap1.Height; Image1.Canvas.CopyRect(Rect(0, 0, xBitmap1.Width, xBitmap1.Height), xBitmap1.Canvas, Rect(0, 0, xBitmap1.Width, xBitmap1.Height)); image1.Picture.Bitmap.Assign(xbitmap1); finally
xBitmap1.Free; end; except end; SpeedButton2.Down := False; end; end; procedure TForm1.Button1Click(Sender: TObject); begin {*****untuk menampilkan kotak dialog pemilihan driver video yang digunakan****************} {*****hal ini akan sangat berguna jika ada lebih dari satu driver di dalam computer**************} capDlgVideoSource(FCapWndHandle); end; procedure TForm1.Button2Click(Sender: TObject); begin {*****untuk menampilkan kotak dialog pemilihan Format hasil yang digunakan****************} {*****hal ini akan sangat berguna jika format data tertentu yang anda inginkan**************} capDlgVideoFormat(FCapWndHandle); end; end. FcapWndHandle adalah sebuah handle yang disediakan untuk menampung window atau jendela pada proses pembuatan objek capture dari driver alat video yang kita kehendaki, oleh karena itu objek inilah yang akan selalu kita ambil pada saat mengambil, atau memanggil prosedur dan fungsi yang lain. Berikut adalah penjelasan dari beberapa perintah diatas: 1. capGrabFrame(FCapWndHandle); sebuah perintah yang memisahkan setiap grabber menjadi beberapa bitmap frame dari FcapWndHandle. 2. capEditCopy(FCapWndHandle); perintah yang mengambil (copy) bitmap per frame ke dalam clipboard. 3. capOverlay(FCapWndHandle, TRUE); perintah melakukan overlay / penumpukan gambar (jika TRUE) pada setiap framenya. 4. capPreview(FCapWndHandle, TRUE); perintah menampilkan (preview) dari setiap frame (jika TRUE). Perintah ini akan menampilkan (mempreview) pada panel2 karena handle dari FCapWndHandle kita serahkan pada panel2 (lihat lagi listing diatas).
Setelah kita berhasil menampilkanya di panel, kemudian pada listing diatas kita kemudian menampilkannya pada komponen bitmap, sehingga kita perlu membuat sebuah bitmap dengan xBitmap1 := TBitmap.Create; . Objek bitmap ini masih kosong sehingga kemudian kita isi dengan bitmap yang ada pada clipboard (sama dengan
FCapWndHandle) kemudian barulah mengisinya ke komponen visual bitmap yaitu image1.Picture.Bitmap.Assign(xbitmap1);
Jadi pada listing diatas seharusnya akan menampilkan dua preview yang sama hanya saja mempunyai metode yang berbeda dalam menampilkanya.
-----------------GOOD LUCK!!--------------------