Merakam Skrin Dengan Pantas: Mempelajari Kaedah Penyiaran Skrin untuk Windows
Dalam usaha mencipta aplikasi penyiaran skrin pada Windows, memilih yang paling cekap kaedah untuk menangkap skrin adalah penting. Walaupun GDI berdiri sebagai alat biasa, meneroka pendekatan alternatif adalah wajar untuk meminimumkan overhed prestasi.
Kemunculan Windows Media API dan DirectX telah memperkenalkan kemungkinan tangkapan skrin baharu. Walau bagaimanapun, memahami sebab melumpuhkan pecutan perkakasan meningkatkan prestasi tangkapan kekal sebagai pertanyaan yang menarik. Peningkatan ini timbul daripada pengurangan dalam operasi yang berkaitan dengan pemaparan dan penggubahan, yang membolehkan peruntukan sumber yang lebih cekap.
Pemacu tangkapan tersuai, yang digunakan oleh aplikasi seperti Camtasia, menawarkan kelajuan yang luar biasa dengan menggunakan kod khusus yang memintas grafik asas API dan mengekstrak data terus dari penimbal belakang. Teknik ini memintas penimbal hadapan, menggunakan RAM sistem dan bukannya RAM video, menghasilkan peningkatan prestasi yang ketara.
Pelaksanaan Teknikal Pemacu Tangkapan Tersuai
Melaksanakan tersuai pemacu tangkap memerlukan pemahaman yang mendalam tentang API grafik dan keupayaan untuk menulis kod yang memintas panggilan sistem. Berikut ialah gambaran keseluruhan proses yang dipermudahkan:
Walaupun dokumentasi sedia ada boleh memberikan cerapan, membangunkan dan menggunakan pemacu tangkapan tersuai memerlukan kepakaran teknikal dan pemahaman yang menyeluruh tentang sistem asas.
Kod Contoh untuk Tangkapan Bingkai Tunggal
Untuk menangkap satu bingkai, pertimbangkan kod berikut coretan:
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); // get the current adapter display mode. //hr = pDirect3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddisplaymode); // 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(); }
Kod ini boleh diubah suai untuk menstrim bingkai secara berterusan dengan mengekalkan sasaran paparan terbuka dan menggunakan pembilang statik untuk penamaan fail.
Atas ialah kandungan terperinci Bagaimanakah Pemacu Tangkapan Tersuai Boleh Meningkatkan Prestasi Penyiaran Skrin pada Windows?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!