hi folks,
ich suche einen befehl, mit dem ich ein "screenshot" vom front- bzw. backbuffer erstellen und als datei ausgeben kann. hat zufällig jemand eine idee??
vielen dank im voraus!
c ya,
nco2k
(DirectX) Screenshot vom Front- bzw. Backbuffer erstellen ?!
Code: Alles auswählen
;Bitmap anlegen
CreateImage(0,GetSystemMetrics_(#SM_CXSCREEN),GetSystemMetrics_(#SM_CYSCREEN))
;auf angelegtes Bitmap zeichnen
DC = StartDrawing(ImageOutput())
BitBlt_(DC,0,0,ImageWidth(),ImageHeight(),GetDC_(GetDesktopWindow_()),0,0,#SRCCOPY )
StopDrawing()
;Bitmap an Fenstergroesse anpassen
ResizeImage(0,640,480)
If OpenWindow(0, 10, 10, 640, 480, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget, "Screenshot")
StartDrawing(WindowOutput())
DrawImage(ImageID(),0,0)
StopDrawing()
Repeat
EventID.l = WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
Quit = 1
EndIf
Until Quit = 1
EndIf
End
; ExecutableFormat=Windows
; EOF
mfG
Basti
//Edit: Ist dann wohl immer aus dem Front-Buffer, und ob es unter DirectX funzt weiß ich nicht
//Edit: PureArea.net -> CodeArchive -> Windows_System -> Screenshots
Zuletzt geändert von sbehrens am 15.10.2004 14:20, insgesamt 2-mal geändert.
enjoy life... while you can!
-
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
@ptI:
Das ist glaube ich nicht was er wollte. Er will einfach das Back- ODER Front- Buffer kopieren, nicht das, was gerade auf dem Bildschirm ist(gut Frontbuffer ist eigentlich das, was auf dem Bildschirm ist, aber was will man tun, wenn es im Fenstermodus ist?).
Das ist glaube ich nicht was er wollte. Er will einfach das Back- ODER Front- Buffer kopieren, nicht das, was gerade auf dem Bildschirm ist(gut Frontbuffer ist eigentlich das, was auf dem Bildschirm ist, aber was will man tun, wenn es im Fenstermodus ist?).
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
ich kenne das schon aus dem alten forum und genau das ist es, was ich nicht suche.
der code macht einen direkten schnapschuss "von oben drauf" samt allen was dazwischen steht. wenn ich z.b. das selbe im windowed mode machen würde und ein fenster würde einen teil, meiner anwendung verdecken, würde diese dann auch mit aufs foto gepackt und das will ich nicht. bisher habe ich das immer so gelöst http://robsite.de/php/pureboard-archiv/ ... php?t=4116, aber das ist nur eine notlösung, die ich vermeiden möchte.
c ya,
nco2k

der code macht einen direkten schnapschuss "von oben drauf" samt allen was dazwischen steht. wenn ich z.b. das selbe im windowed mode machen würde und ein fenster würde einen teil, meiner anwendung verdecken, würde diese dann auch mit aufs foto gepackt und das will ich nicht. bisher habe ich das immer so gelöst http://robsite.de/php/pureboard-archiv/ ... php?t=4116, aber das ist nur eine notlösung, die ich vermeiden möchte.
c ya,
nco2k
Re: (DirectX) Screenshot vom Front- bzw. Backbuffer erstelle
Ich mache Screenshots einfach bei einer Taste (z.B. F1):nco2k hat geschrieben:ich suche einen befehl, mit dem ich ein "screenshot" vom front- bzw. backbuffer erstellen und als datei ausgeben kann. hat zufällig jemand eine idee??
GrabSprite, SaveSprite, FreeSprite
EDIT:
Falls Du direkt DX meinst, dann kommt es darauf an welche
Version von DX Du programmierst.
Bei DX9 schauste Dir mal IDirect3DDevice9::GetFrontBufferData() an.
IDirect3DDevice9::GetFrontBufferData():
"This method is the only way to capture an antialiased screen shot."
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
sry, hab nicht gesehen, dass es schon mal angeboten wurde.MUDHead hat geschrieben:Screenshots kann man ganz einfach so machen:
oder gleich im Programm mit :Code: Alles auswählen
Procedure Screenshot(ImageNr,x,y,Width,Height) hImage = CreateImage(ImageNr,Width,Height) hDC = StartDrawing(ImageOutput()) DeskDC = GetDC_(GetDesktopWindow_()) BitBlt_(hDC,0,0,Width,Height,DeskDC,x,y,#SRCCOPY) StopDrawing() ReleaseDC_(GetDesktopWindow_(),DeskDC) ProcedureReturn hImage EndProcedure Screenshot(0, 0, 0, 1024, 768) SaveImage(0, "C:\DesktopScreenshot.gif")
ah, hat Danilo schon gesagt.Code: Alles auswählen
SaveSprite, FreeSprite,GrabSprite
EDIT: Code eingerückt
Ja,
Code: Alles auswählen
GrabSprite,SaveSprite, FreeSprite
Zuletzt geändert von MUDHead am 15.10.2004 16:56, insgesamt 1-mal geändert.
Malus, qui potest rerum cognoscere.
@MUDHead
das suche ich nicht, siehe weiter oben! ausserdem meinst du sicherlich "GrabSprite,SaveSprite,FreeSprite" und nicht "SaveSprite,FreeSprite,GrabSprite".
@Danilo
vielen dank für den tip! wusste nicht das es so auch geht. werd mir dennoch mal IDirect3DDevice9::GetFrontBufferData() anschauen, klingt sehr vielversprechend.
c ya,
nco2k
das suche ich nicht, siehe weiter oben! ausserdem meinst du sicherlich "GrabSprite,SaveSprite,FreeSprite" und nicht "SaveSprite,FreeSprite,GrabSprite".
@Danilo
vielen dank für den tip! wusste nicht das es so auch geht. werd mir dennoch mal IDirect3DDevice9::GetFrontBufferData() anschauen, klingt sehr vielversprechend.

c ya,
nco2k