SORU
21 ŞUBAT 2011, PAZARTESİ


En hızlı ekran yakalama yöntemi

Windows platformu için güçlü bir program yazmak istiyorum, ama ekran yakalamak için nasıl emin değilim. Farkında olduğum tek yöntem GDI kullanmaktır, ama en azından yükü doğurur ki bu konuda, eğer varsa, gitmek için başka yollar da var mı, merak ediyorum? Hızlı bir önceliktir.

Güçlü bir program, eğer bu seçenekleri daraltmak Eğer, hala bu kapsam dışında kalan diğer önerilere açığım, ancak kayıt oyun film için olacak. Bilgi kötü değil.

Edit: Karşısında bu madde geldim: Various methods for capturing the screen. Ne Windows Media API ve DirectX yapmanın yolu tanıştırdı. Donanım ivmesi devre dışı bırakılması büyük ölçüde yakalama uygulamanın performansı Sonuç olarak bahseder. Bu yüzden çok merak ediyorum. Kimsenin benim için eksik boşlukları doldurabilir mi?

Edit: MB gibi güçlü bir program kendi yakalama sürücüsü kullanan okudum. Biri bana bunun nasıl çalıştığını ve daha hızlı neden ayrıntılı bir açıklama yapabilir mi acaba? Ayrıca böyle bir şeyi uygulama konusunda rehberlik ihtiyacım olabilir, ama mevcut belgeler zaten var eminim.

Ayrıca, ben şimdi bu kullanışlı ekran kayıtları nasıl. Alttaki grafik API arka tampon okumaya kanca. Anladığım kadarıyla, bu sistem RAM yerine video RAM okuma çünkü ön tampon okuma daha hızlıdır. Madde here okuyabilirsiniz.

CEVAP
28 ŞUBAT 2011, PAZARTESİ


Ne için kullanmak için toplamak tek Kare, ama eğer bu Düzenle ve devam et bu iki hedef açık her zaman daha sonra "stream" disk kullanarak bir statik sayaç için dosya adı. - Bunları nereden bulduğumu hatırlamıyorum, ama değiştirildi, herkese teşekkürler!

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();
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • bcbauer

    bcbauer

    7 ŞUBAT 2007
  • BlackBoxTV

    BlackBoxTV

    7 Mayıs 2007
  • Matt Harding

    Matt Harding

    23 Mayıs 2006