Latar Belakang
Aturcara tayangan sering mengutamakan menangkap acara skrin dengan prestasi minimum kesan. Dengan GDI sebagai kaedah yang terkenal untuk tangkapan skrin, pendekatan lain wajar dipertimbangkan untuk potensi keuntungan kecekapan mereka. Artikel ini bertujuan untuk meneroka kaedah terpantas dan memberikan cerapan tentang pelaksanaannya.
Kaedah Alternatif kepada GDI
API Windows Media dan DirectX menawarkan pilihan tangkapan skrin alternatif dengan penambahbaikan prestasi. Windows Media API memanfaatkan DirectShow, membolehkan penciptaan penapis tangkapan tersuai. DirectX menggunakan Direct3D, menyediakan akses kepada operasi grafik peringkat rendah.
Pecutan dan Prestasi Perkakasan
Melumpuhkan pecutan perkakasan boleh meningkatkan prestasi tangkapan dengan ketara. Ini kerana pecutan perkakasan memunggah tugasan kepada perkakasan khusus, yang boleh memperkenalkan kependaman. Dengan memintas pecutan perkakasan, proses tangkapan berlaku terus pada CPU, mengurangkan kelewatan.
Pemacu Tangkapan Tersuai
Program seperti Camtasia menggunakan pemacu tangkapan tersuai untuk mencapai kelajuan tinggi tangkapan skrin. Pemacu ini beroperasi pada tahap yang lebih rendah, memintas panggilan API grafik dan membaca bingkai terus daripada RAM sistem. Ini memintas operasi bacaan RAM video yang lebih perlahan, menghasilkan kecekapan yang dipertingkatkan.
Tangkapan Penampan Belakang lwn. Penampan Depan
FRAPS menangkap skrin dengan mengaitkan API grafik asas dan membaca daripada penampan belakang. Penampan belakang menyimpan bingkai yang diberikan akhir, yang lebih pantas untuk diakses daripada penimbal hadapan. Teknik ini menghapuskan keperluan untuk rampasan skrin penuh, seterusnya mengoptimumkan prestasi.
Sampel Kod untuk Tangkapan Skrin Direct3D
Berikut ialah coretan kod yang menunjukkan tangkapan skrin menggunakan Direct3D dalam C :
void dump_buffer() { IDirect3DSurface9* pRenderTarget=NULL; IDirect3DSurface9* pDestTarget=NULL; const char file[] = "Pickture.bmp"; // sanity checks. if (Device == NULL) return; // get the render target surface. HRESULT hr = Device->GetRenderTarget(0, &pRenderTarget); // create a destination surface. hr = Device->CreateOffscreenPlainSurface(DisplayMde.Width, DisplayMde.Height, DisplayMde.Format, D3DPOOL_SYSTEMMEM, &pDestTarget, NULL); //copy the render target to the destination surface. hr = Device->GetRenderTargetData(pRenderTarget, pDestTarget); // save its contents to a bitmap file. hr = D3DXSaveSurfaceToFile(file, D3DXIFF_BMP, pDestTarget, NULL, NULL); // clean up. pRenderTarget->Release(); pDestTarget->Release(); }
Atas ialah kandungan terperinci Apakah Kaedah Terpantas untuk Pengoptimuman Tangkapan Skrin pada Windows?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!