Ekran Görüntüsü - Farklı Sorun
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: Ekran Görüntüsü - Farklı Sorun
Arkadaşlar DirectX ile nasıl ekran görüntüsü alabilirim. Hiç bir kaynak bulamadım
Re: Ekran Görüntüsü - Farklı Sorun
Aşağıdaki kod bloğu ile alabilirsiniz;
Kod: Tümünü seç
uses
Direct3D9,D3DX9;
procedure TForm1.CaptureScreen(Const FileName: string);
var
BitsPerPixel : Byte;
pD3D : IDirect3D9;
pSurface : IDirect3DSurface9;
g_pD3DDevice : IDirect3DDevice9;
D3DPP : TD3DPresentParameters;
ARect : TRect;
LockedRect : TD3DLockedRect;
BMP : TBitmap;
i, p : Integer;
begin
BitsPerPixel := GetDeviceCaps(Canvas.Handle, BITSPIXEL);
FillChar(d3dpp, SizeOf(d3dpp), 0);
D3DPP.Windowed := True;
D3DPP.Flags := D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
D3DPP.SwapEffect := D3DSWAPEFFECT_DISCARD;
D3DPP.BackBufferWidth := Screen.Width;
D3DPP.BackBufferHeight := Screen.Height;
D3DPP.BackBufferFormat := D3DFMT_X8R8G8B8;
pD3D := Direct3DCreate9(D3D_SDK_VERSION);
pD3D.CreateDevice(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
GetDesktopWindow,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
@D3DPP,
g_pD3DDevice
);
g_pD3DDevice.CreateOffscreenPlainSurface(
Screen.Width,
Screen.Height,
D3DFMT_A8R8G8B8,
D3DPOOL_SCRATCH,
pSurface,
nil
);
g_pD3DDevice.GetFrontBufferData(0, pSurface);
ARect := Screen.DesktopRect;
pSurface.LockRect(
LockedRect,
@ARect,
D3DLOCK_NO_DIRTY_UPDATE or
D3DLOCK_NOSYSLOCK or
D3DLOCK_READONLY
);
BMP := TBitmap.Create;
BMP.Width := Screen.Width;
BMP.Height := Screen.Height;
case BitsPerPixel of
8 : BMP.PixelFormat := pf8bit;
16: BMP.PixelFormat := pf16bit;
24: BMP.PixelFormat := pf24bit;
32: BMP.PixelFormat := pf32bit;
end;
p := Cardinal(LockedRect.pBits);
for i := 0 to Screen.Height - 1 do
begin
CopyMemory(
BMP.ScanLine[i],
Ptr(p),
Screen.Width * BitsPerPixel div 8
);
p := p + LockedRect.Pitch;
end;
BMP.SaveToFile(FileName);
BMP.Free;
pSurface.UnlockRect;
end;
Re: Ekran Görüntüsü - Farklı Sorun
Öncelikle Kod Bloğu İçin Teşekkür Ederim Ancak Şöyle Bir Durum Var.
Oyun Kapalı İken başarılı bir şekilde ekran görüntüsü alabilirken oyun açıkken aşağıdaki satırdan değer nil döndüğü için Access hatası alıyorum.
pD3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, GetDesktopWindow,
D3DCREATE_SOFTWARE_VERTEXPROCESSING, @D3DPP, g_pD3DDevice);
g_pD3DDevice değişkeni Nil geldiği için
g_pD3DDevice.CreateOffscreenPlainSurface(Screen.Width, Screen.Height,
D3DFMT_A8R8G8B8, D3DPOOL_SCRATCH, pSurface, nil);
satırında hata veriyor.
Bunun nedeni oyun açıkken ekran kartı üzerine koruma koyuyor olabilir mi.?
Oyun Kapalı İken başarılı bir şekilde ekran görüntüsü alabilirken oyun açıkken aşağıdaki satırdan değer nil döndüğü için Access hatası alıyorum.
pD3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, GetDesktopWindow,
D3DCREATE_SOFTWARE_VERTEXPROCESSING, @D3DPP, g_pD3DDevice);
g_pD3DDevice değişkeni Nil geldiği için
g_pD3DDevice.CreateOffscreenPlainSurface(Screen.Width, Screen.Height,
D3DFMT_A8R8G8B8, D3DPOOL_SCRATCH, pSurface, nil);
satırında hata veriyor.
Bunun nedeni oyun açıkken ekran kartı üzerine koruma koyuyor olabilir mi.?
Re: Ekran Görüntüsü - Farklı Sorun
Makinanızda DirectX'in sürümünden kaynaklanan bir problem olabilir. Size örnek teşkil etmesi için gönderdiğim kodu bir oyun açık iken denedim ve ekran görüntüsünü alabildim. dxdiag ile sisteminizdeki DirectX ile ilgili bir sorun olup olmadığına bir bakmalısınız, her ihtimale karşı güncel bir DirectX kurmayı da deneyebilirsiniz. CaptureScreen isimli metodu, oyununuz açıkken ve ön planda iken çalıştırmayı deneyin bir de arzu ederseniz. Arka plana bir timer koyun zamanlamasını bir kaç saniye sonraya ayarlayın ve o arada hızlıca oyuna geçin; kod ön planda oyun aktif iken çalışmayı denesin bir de bakalım bu durumda bir sıkıntı yaşanacak mı.. ?
Re: Ekran Görüntüsü - Farklı Sorun
DirectX de sorun yok gibi gözüküyor.Ayrıca oyun pencere modunda iken oyunun olduğu ekranın görüntüsünü alabiliyorum ancak oyunda pencere modunu kapatıp tam ekran oynadığmda görüntü alamıyorum.Bahsettiğim Oyun Point Blank Aslında.
Hem dediğiniz gibi denemiştim zaten, Timer Interval 5000 iken programı çalıştırıp oyunu açıyorum bu metod'da hata veriyor.
Anlamadım Gitti Arkadaş..
Hem dediğiniz gibi denemiştim zaten, Timer Interval 5000 iken programı çalıştırıp oyunu açıyorum bu metod'da hata veriyor.
Anlamadım Gitti Arkadaş..
Re: Ekran Görüntüsü - Farklı Sorun
Arkadaşlar uzun zamandır bu hatanın çözümünü arıyorum. Ancak bulamadım, yardım edebilecek birisi var mı ..?
-
- Üye
- Mesajlar: 152
- Kayıt: 16 May 2014 11:23
Re: Ekran Görüntüsü - Farklı Sorun
bende de aynı hatayı veriyor bende denedim sayın Tuğrul Hocam aynı noktada bende de hata mevcut