Hardcopy Bildschirm
-
- Beiträge: 282
- Registriert: 03.01.2005 11:36
Hardcopy Bildschirm
Einen guten Morgen!
Hier im Forum habe ich folgenden Code gefunden, mit dem man eine Hardcopy vom Bildschirm machen kann. Nun bekomme ich es aber nicht hin, das Ergebnis z.B. in einem Laufwerk z.B. unter H:\Hardcopy\Bild1.jpg zu speichern.
Kann mir jemand sagen wie das geht?
Hier der Code:
;nicolaus - http://www.purebasic.fr/german/viewtopic.php?t=10790
Procedure.l CaptureScreen()
ExamineDesktops()
width = DesktopWidth(0)
height = DesktopHeight(0)
srcDC = CreateDC_("DISPLAY", "", "", dm.DEVMODE)
trgDC = CreateCompatibleDC_(srcDC)
BMPHandle = CreateCompatibleBitmap_(srcDC, width, height)
SelectObject_( trgDC, BMPHandle)
BitBlt_( trgDC, 0, 0, width, height, srcDC, 0, 0, #SRCCOPY)
DeleteDC_( trgDC)
ReleaseDC_(BMPHandle, srcDC)
CreateImage(0, width, height, 32)
StartDrawing(ImageOutput(0))
DrawImage(BMPHandle, 0, 0)
StopDrawing()
DeleteObject_(BMPHandle)
EndProcedure
OpenWindow(0,0,0,320,240,"",$CF0001)
SetWindowLong_(WindowID(0),#GWL_EXSTYLE,GetWindowLong_(WindowID(0),#GWL_EXSTYLE)|#WS_EX_LAYERED)
Delay(100)
CaptureScreen()
ResizeImage(0,640,480)
OpenWindow(1,0,0,640,480,"",$CF0001)
CreateGadgetList(WindowID(1))
ImageGadget(0,0,0,0,0,ImageID(0))
Repeat:Until WaitWindowEvent()=#WM_CLOSE
Grüße und schonmal Danke
Martin
Hier im Forum habe ich folgenden Code gefunden, mit dem man eine Hardcopy vom Bildschirm machen kann. Nun bekomme ich es aber nicht hin, das Ergebnis z.B. in einem Laufwerk z.B. unter H:\Hardcopy\Bild1.jpg zu speichern.
Kann mir jemand sagen wie das geht?
Hier der Code:
;nicolaus - http://www.purebasic.fr/german/viewtopic.php?t=10790
Procedure.l CaptureScreen()
ExamineDesktops()
width = DesktopWidth(0)
height = DesktopHeight(0)
srcDC = CreateDC_("DISPLAY", "", "", dm.DEVMODE)
trgDC = CreateCompatibleDC_(srcDC)
BMPHandle = CreateCompatibleBitmap_(srcDC, width, height)
SelectObject_( trgDC, BMPHandle)
BitBlt_( trgDC, 0, 0, width, height, srcDC, 0, 0, #SRCCOPY)
DeleteDC_( trgDC)
ReleaseDC_(BMPHandle, srcDC)
CreateImage(0, width, height, 32)
StartDrawing(ImageOutput(0))
DrawImage(BMPHandle, 0, 0)
StopDrawing()
DeleteObject_(BMPHandle)
EndProcedure
OpenWindow(0,0,0,320,240,"",$CF0001)
SetWindowLong_(WindowID(0),#GWL_EXSTYLE,GetWindowLong_(WindowID(0),#GWL_EXSTYLE)|#WS_EX_LAYERED)
Delay(100)
CaptureScreen()
ResizeImage(0,640,480)
OpenWindow(1,0,0,640,480,"",$CF0001)
CreateGadgetList(WindowID(1))
ImageGadget(0,0,0,0,0,ImageID(0))
Repeat:Until WaitWindowEvent()=#WM_CLOSE
Grüße und schonmal Danke
Martin
Re: Hardcopy Bildschirm
Bitte Code-Tags verwenden.
Zum Speichern von Images gibt es: SaveImage()
Dort dann einfach die Image-Nummer angeben die du in deinem Code auch nutzt (in dem Fall 0)
und den Speicher-Pfad
Für *.jpg benötigst du dann noch den UseJPEGImageEncoder() wie es auch in der Hilfe steht.
Zum Speichern von Images gibt es: SaveImage()
Dort dann einfach die Image-Nummer angeben die du in deinem Code auch nutzt (in dem Fall 0)
und den Speicher-Pfad
Für *.jpg benötigst du dann noch den UseJPEGImageEncoder() wie es auch in der Hilfe steht.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
-
- Beiträge: 282
- Registriert: 03.01.2005 11:36
Re: Hardcopy Bildschirm
Vielen Dank für die Antwort!
Hat geklappt!!!!!
Ich habe
SaveImage(0, "H:\Copy.bmp")
hinter die Zeile
ResizeImage(0,640,480)
eingefügt.
Sorry, habe noch eine Frage hinterher!
Die abgespeicherte Datei ist ja 1,2MB groß. Kann man die nicht kleiner machen?
Grüße
Martin
Hat geklappt!!!!!
Ich habe
SaveImage(0, "H:\Copy.bmp")
hinter die Zeile
ResizeImage(0,640,480)
eingefügt.
Sorry, habe noch eine Frage hinterher!
Die abgespeicherte Datei ist ja 1,2MB groß. Kann man die nicht kleiner machen?
Grüße
Martin
Re: Hardcopy Bildschirm
speicher das Bild als JP(E)G oder PNG.Martin66119 hat geschrieben:Die abgespeicherte Datei ist ja 1,2MB groß. Kann man die nicht kleiner machen?
Grüße ... Kiffi
a²+b²=mc²
-
- Beiträge: 282
- Registriert: 03.01.2005 11:36
Re: Hardcopy Bildschirm
Vielen Dank!
Hat alles funktioniert.
Nun sind es nur noch 104k (habe png genommen).
Grüße
Martin
Hat alles funktioniert.
Nun sind es nur noch 104k (habe png genommen).
Grüße
Martin
-
- Beiträge: 282
- Registriert: 03.01.2005 11:36
Re: Hardcopy Bildschirm
Hallo mal wieder,
das mit der screenshot funktioniert bestens! Vielen Dank noch mal!
Nun frage ich mich aber, wie man 2 oder drei "Bilder" in eine Datei packen kann, damit man einen Ablauf aufzeichenn kann um diesen z.B. bei Schulungszwecken zeigen zu können.
Grüße
Martin
das mit der screenshot funktioniert bestens! Vielen Dank noch mal!
Nun frage ich mich aber, wie man 2 oder drei "Bilder" in eine Datei packen kann, damit man einen Ablauf aufzeichenn kann um diesen z.B. bei Schulungszwecken zeigen zu können.
Grüße
Martin
Re: Hardcopy Bildschirm
Wie meinst du "in eine Datei"?
Filmstreifenmäßig?
Dazu musst du mit CreateImage() ein Image erstellen, dass so groß ist, dass alle Bilder reinpassen. Dann die einzelnen Bilder mit DrawImage() "draufkleben" und dann das große Bild abspeichern.
Filmstreifenmäßig?
Dazu musst du mit CreateImage() ein Image erstellen, dass so groß ist, dass alle Bilder reinpassen. Dann die einzelnen Bilder mit DrawImage() "draufkleben" und dann das große Bild abspeichern.
Code: Alles auswählen
UseJPEGImageDecoder()
UseJPEGImageEncoder()
#Anzahl = 2
For a = 1 To #Anzahl
image$ = OpenFileRequester("","","*.jpg",0)
If image$
LoadImage(a, image$)
width + ImageWidth(a)
If ImageHeight(a) > height
height = ImageHeight(a)
EndIf
EndIf
Next
image = CreateImage(#PB_Any, width, height)
StartDrawing(ImageOutput(image))
For a = 1 To #Anzahl
If IsImage(a-1)
DrawImage(ImageID(a), ImageWidth(a-1), 0)
Else
DrawImage(ImageID(a), 0, 0)
EndIf
Next
StopDrawing()
save$ = SaveFileRequester("","","*.jpg",0)
If save$
SaveImage(image, save$, #PB_ImagePlugin_JPEG)
EndIf
End
-
- Beiträge: 282
- Registriert: 03.01.2005 11:36
Re: Hardcopy Bildschirm
Hallo!
Ja, ich meine sowas wie "Filmstreifenmäßig" bzw. dass man mit einem Bildbetrachtungsprogramm von einem zum anderen Bild durchklicken kann.
Was ich im Moment verwende, ist das was ich hier im Forum bekommen habe. Damit kann speichere ich jedes einzelne Bild in einen getrennten Datei. Nun möchte ich aber, dass die Bilder in einer Datei "Filmstreifenmäßig" drin sind oder aber mit einem Bildbetrachtungsprogramm durchgeklickt werden können.
;------------------------------------------------------------
UseJPEGImageDecoder()
UseJPEGImageEncoder()
Procedure.l CaptureScreen()
ExamineDesktops()
width = DesktopWidth(0)
height = DesktopHeight(0)
srcDC = CreateDC_("DISPLAY", "", "", dm.DEVMODE)
trgDC = CreateCompatibleDC_(srcDC)
BMPHandle = CreateCompatibleBitmap_(srcDC, width, height)
SelectObject_( trgDC, BMPHandle)
BitBlt_( trgDC, 0, 0, width, height, srcDC, 0, 0, #SRCCOPY)
DeleteDC_( trgDC)
ReleaseDC_(BMPHandle, srcDC)
CreateImage(0, width, height, 32)
StartDrawing(ImageOutput(0))
DrawImage(BMPHandle, 0, 0, 640,480)
StopDrawing()
DeleteObject_(BMPHandle)
EndProcedure
If OpenWindow(0, 0, 0, 400, 100, "Timer Example", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
DisableWindow(0, 1)
AddWindowTimer(0, 123, 2000)
Value = 0
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Timer And EventTimer() = 123
CaptureScreen()
i = i+1
name$ = "h:\Datei" + Str(i)
SaveImage(0,name$,#PB_ImagePlugin_JPEG)
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
Ja, ich meine sowas wie "Filmstreifenmäßig" bzw. dass man mit einem Bildbetrachtungsprogramm von einem zum anderen Bild durchklicken kann.
Was ich im Moment verwende, ist das was ich hier im Forum bekommen habe. Damit kann speichere ich jedes einzelne Bild in einen getrennten Datei. Nun möchte ich aber, dass die Bilder in einer Datei "Filmstreifenmäßig" drin sind oder aber mit einem Bildbetrachtungsprogramm durchgeklickt werden können.
;------------------------------------------------------------
UseJPEGImageDecoder()
UseJPEGImageEncoder()
Procedure.l CaptureScreen()
ExamineDesktops()
width = DesktopWidth(0)
height = DesktopHeight(0)
srcDC = CreateDC_("DISPLAY", "", "", dm.DEVMODE)
trgDC = CreateCompatibleDC_(srcDC)
BMPHandle = CreateCompatibleBitmap_(srcDC, width, height)
SelectObject_( trgDC, BMPHandle)
BitBlt_( trgDC, 0, 0, width, height, srcDC, 0, 0, #SRCCOPY)
DeleteDC_( trgDC)
ReleaseDC_(BMPHandle, srcDC)
CreateImage(0, width, height, 32)
StartDrawing(ImageOutput(0))
DrawImage(BMPHandle, 0, 0, 640,480)
StopDrawing()
DeleteObject_(BMPHandle)
EndProcedure
If OpenWindow(0, 0, 0, 400, 100, "Timer Example", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
DisableWindow(0, 1)
AddWindowTimer(0, 123, 2000)
Value = 0
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Timer And EventTimer() = 123
CaptureScreen()
i = i+1
name$ = "h:\Datei" + Str(i)
SaveImage(0,name$,#PB_ImagePlugin_JPEG)
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
Re: Hardcopy Bildschirm
Na, meinen Code wirst du doch wohl an deinen Code anpassen können, oder nicht?
Bildbetrachter klicken in der Regel einzelne Bilder durch.
Ich verstehe jetzt nicht, warum du das ein einer Datei haben willst, wenn du eien Bildbetrachter verwendest mit dem du dann doch wieder die einzelnen Bilder ansehen willst.
Und vielleicht benutzt du mal Code-Tags?[/code]
Bildbetrachter klicken in der Regel einzelne Bilder durch.
Ich verstehe jetzt nicht, warum du das ein einer Datei haben willst, wenn du eien Bildbetrachter verwendest mit dem du dann doch wieder die einzelnen Bilder ansehen willst.
Und vielleicht benutzt du mal Code-Tags?
Code: Alles auswählen
[code]
;Dein PB Code
-
- Beiträge: 282
- Registriert: 03.01.2005 11:36
Re: Hardcopy Bildschirm
Hallo TomS,
ja das bekomme ich hin, denke ich! Wollte nur kurz wiedergeben was ich im Moment verwende! Den Code-Tags werde ich künftig verwenden!
Gruß
Martin
ja das bekomme ich hin, denke ich! Wollte nur kurz wiedergeben was ich im Moment verwende! Den Code-Tags werde ich künftig verwenden!
Gruß
Martin