Screenshot

Anfängerfragen zum Programmieren mit PureBasic.
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

Screenshot

Beitrag von Martin66119 »

Hallo und guten Abend!

Beispiele für Screenshot habe ich einige gefunden. Nur das das ganze passt nicht so recht auf mein Problem.

Was möchte ich?

Wenn ich die Taste F12 drücke soll ein Screenshot gemacht und gespeichert werden. Wenn ich nochmal auf F12 drüche soll ein weiteres gemacht werden aber nicht als getrenntes Bild gespeichert sondern in einer datei. Also sozusagen in einem Bild in dem 2 drin sind. Und beim dritten druck auf F12 sollts so weitergehen.

Wie mache ich das am einfachsten.

Martin
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Screenshot

Beitrag von RSBasic »

1. Erstelle eine Tastenabfrage
2. und wenn die F12-Taste gedrückt wurde, dann erstelle ein Screenshot. Du sagtest ja, du hast ja bereits Beispielcodes gefunden.
3.1. Wenn es das erste Mal ist, dann erstelle ein Bild (CreateImage()) und füg dort dein Screenshot ein und speichere es (SaveImage()).
3.2. Ansonsten lade das vorhandene Bild (LoadImage()) und ermittle die Bildbreite (ImageWidth()), um ab der x. Position dein Screenshot einzufügen (DrawImage()).

Reicht dir diese kurze Beschreibung oder brauchst du ein Beispielcode?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Screenshot

Beitrag von STARGÅTE »

Wenn ich nochmal auf F12 drüche soll ein weiteres gemacht werden aber nicht als getrenntes Bild gespeichert sondern in einer datei. Also sozusagen in einem Bild in dem 2 drin sind. Und beim dritten druck auf F12 sollts so weitergehen.
Was bitte soll der Sinn davon dein?
Wenn ich nun 10 mal auf F12 drücke, dann werden alle Screens in ein Bild gespeichert was dann (10*1920)x1080 droß ist also 19200x1080 ??

Wie ich das kenne, werden die gemachten Screens fortlaufend nummeriert und in einen Ordner gespeichert, aber nicht alle in ein Bild :freak:
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
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

Re: Screenshot

Beitrag von Martin66119 »

Vielen Dank an euch beide!

Am liebsten würde ich die scrennshots bei jedem Tastendruck in z.B. in ein Worddokument oder pdf-Dokument hintereinander einfügen.

Wenn es dazu ein Beispiel geben würde, das wäre toll.

Grüße
martin
Benutzeravatar
WPö
Moderator
Beiträge: 669
Registriert: 27.05.2008 12:44
Wohnort: Oberland
Kontaktdaten:

Re: Screenshot

Beitrag von WPö »

Moin!

Word ist Müll. Wenn schon so'n Klimmzug, dann LibreOffice Writer (ist'n - glaube ich - gezipptes XML) oder PDF. Purebasic unterstützt aber beide Formate nicht nativ, weshalb Du selber 'ranmüßtest mit programmieren.

Wennste wirklich Bilder in einer Bilddatei haben wolltest, müßtest Du ein Format mit Ebenen nehmen. GIF ist nicht besonders sinnvoll für Bildschirmkopien, XCF schon eher. Leider versteht so gut wie kein Programm außer GIMP selbst das XCF.

Da wir nicht wissen, was Du mit dem Ergebnis anfangen willst, bleibt es erstmal dabei, selbst eine Entscheidung zu treffen, welches Format Du brauchst.

Gruß - WPö
Ich glaube nur der Statistik, die ich selbst gefälscht habe!
Meine Netzpräsenz: WPö.de
PB5.31 auf LMDE und Pentium T7200 2,00GHz, 4GB DDR2, ATI X1400.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Screenshot

Beitrag von NicTheQuick »

Man könnte auch unter Windows einen PDF-Druckertreiber nehmen und die Bilder einfach in ein PDF drucken.
Unter Linux könnte man das ImageMagick Paket installiert und dann mit 'convert' Bilder in ein PDF konvertieren.
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

Re: Screenshot

Beitrag von Martin66119 »

hallo NicTheQuick!

genau das suche ich. Nur wie geht das? Ich habe Adobe als PDF-Erstellungsprogramm.

Grüße
Martin
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Screenshot

Beitrag von NicTheQuick »

Du gehst auf Google und suchst "pdf drucker windows" und findest unter anderem diese beiden hübschen Links:
PDFCreator und Free PDF 4.

Wie man jetzt unter Purebasic druckt ist aber wieder ein anderes Thema.
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

Re: Screenshot

Beitrag von Martin66119 »

Hallo Nic,

den PDFCreator kenne ich und habe ich auch schon verwendet. Da ich aber eine "Alte" Version von Adobe bekommen hatte, benutze ich diese im Moment.
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

Re: Screenshot

Beitrag von Martin66119 »

Hallo!
Folgenden Code habe ich im Forum gefunden. Lediglich in der Repeat-Schleife habe ich ein paar Zeilen hinzugefügt. Nun wird bei jedem Tastendruck ein Screenshot gemacht und als Bild gespeichert. Das ganz funktioniert bestens auf meinem Rechner (Win7). Doch wenn ich nun der Compilierten Code auf einem anderen Rechner Starte (Windows XP Rechner im Büro), hängt sich das Programm auf. Aber warum?

Wenn ich nun bei jedem Tastendruck das Bild in ein PDF-Dokument anhängen könnte oder bei Programmende alle Bilder zusammen in ein PDF-einbinden könnte wäre das optimal.

Code: Alles auswählen

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
i = 0
OpenWindow(1,0,0,40,40,"Fenster")

Repeat
  state=GetKeyState_(#VK_F12)
  
  If state<>0 And state<>1
     i = i+1
     CaptureScreen()
     ResizeImage(0,640,480)
     Name.s= "f:\Ablauf\Copy" + StrU(i, #PB_Byte) +".png"
     SaveImage(0, Name.s)
   EndIf
 Until WaitWindowEvent()=#WM_CLOSE
Antworten