Problem mit GetClipboardImage

Anfängerfragen zum Programmieren mit PureBasic.
- chris -
Beiträge: 195
Registriert: 24.08.2005 19:52
Wohnort: Stadtallendorf

Problem mit GetClipboardImage

Beitrag von - chris - »

If möchte einen Screenshot speichern.

Mit diesem Code erhalte ich eine Datei, die 1.6GB groß ist und sich
mit keinem Grafikprogramm öffnen lässt:

Code: Alles auswählen


If GetClipboardImage(0)
  
  Debug "Clipboard"
  
  res = SaveImage(0, "clipboard.bmp")
  
  Debug "res: " + Str(res)
  
EndIf  


Bei diesem Code erhalte ich ein Fehlermeldung:

[16:10:19] [ERROR] clipboard02.pb (Zeile: 6)
[16:10:19] [ERROR] Ungültiger Speicherzugriff. (Schreibfehler an der Adresse 3280898)

und eine Datei die 54 Byte groß ist.

Code: Alles auswählen


If GetClipboardImage(0)
  
  Debug "Clipboard"
  
  res = SaveImage(0, "clipboard.bmp", #PB_ImagePlugin_BMP)
  
  Debug "res: " + Str(res)
  
EndIf  

ist diese Verhalten normal?

------------------------------------------------------------

Wenn ich den ImageEncoder benutze, funktioniert es:

Code: Alles auswählen


UsePNGImageEncoder()

If GetClipboardImage(0)
  
  Debug "Clipboard"
  
  res = SaveImage(0, "clipboard.png", #PB_ImagePlugin_PNG)
  
  Debug "res: " + Str(res)
  
EndIf  

Zuletzt geändert von - chris - am 27.11.2010 16:10, insgesamt 1-mal geändert.
PB v5.72 x86/x64
Windows 10 Pro 64bit
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Re: Problem mit GetClipboardImage

Beitrag von PureLust »

Also ich erhalte bei Deinen beiden ersten Versionen (zumindest bei großen Bildern im Clipboard) eine IMA.
Kommt jedoch auf die Größe des Bildes im Clipboard an.

Würde ich mal als Bug einstufen.

Anbei mal ein Code für's BP-Team, um das Verhalten vielleicht etwas näher einzugrenzen:

Code: Alles auswählen

#SavePath = "C:\Temp\"

If CreateImage(0,1920, 1200)	; <==== saving "normales Image" works fine
	
	If StartDrawing(ImageOutput(0))
		LineXY(0,0,1920,1200,$ff0000)
		LineXY(0,1200,1920,0,$0000ff)
		StopDrawing()
	EndIf

	Debug "Saving normal Image"
	
	res = SaveImage(0, #SavePath+"Standard Image.bmp")
	
	Debug "res: " + Str(res)
	
EndIf 

If GetClipboardImage(1)	; <==== draw Clipboard-Image on "normale Image" works
	
	If CreateImage(2, ImageWidth(1), ImageHeight(1))
		If StartDrawing(ImageOutput(2))
			
			DrawImage(ImageID(1),0,0)
			StopDrawing()
	
			Debug "Saving redrawn Image"
			
			res = SaveImage(2, #SavePath+"redrawn clipboard Image.bmp")
			
			Debug "res: " + Str(res)
			
		EndIf
	EndIf	
	
EndIf 

If GetClipboardImage(3)	; <==== create duplicate of clipboardimage and save it does not work
	
	CopyImage(3,4)
	
	Debug "Saving copied Image"
	
	res = SaveImage(4, #SavePath+"dublicated clipboard Image.bmp")
	
	Debug "res: " + Str(res)
	
EndIf 

If GetClipboardImage(5)	; <==== saving clipboardimage does not work
	
	Debug "saving Clipboard Image"
	
	res = SaveImage(5, #SavePath+"clipboard image.bmp")
	
	Debug "res: " + Str(res)
	
EndIf 
- Die ersten beiden SaveImage funktionieren problemlos.
- die beiden letzten Versionen laufen bei kleineren Bildern (z.B. 317x725) zumindest ohne IMA durch - speichern jedoch (bis auf den Header) einfach nur Müll (ACDSee zeigt nur schwarzes Bild).
- bei größeren Bildern (z.B. einem Screenshot mit 1920x1200) erzeugt SaveImage bei den beiden letzteren Versionen einen IMA.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
- chris -
Beiträge: 195
Registriert: 24.08.2005 19:52
Wohnort: Stadtallendorf

Re: Problem mit GetClipboardImage

Beitrag von - chris - »

Kleiner Nachtrag:

Bei 64bit erhalte ich, bei Variante 1 + 2 (siehe erstes Posting) eine
Fehlermeldung:

[15:13:36] [ERROR] clipboard01.pb (Zeile: 6)
[15:13:36] [ERROR] Ungültiger Speicherzugriff. (Schreibfehler an der Adresse 5316608)

und eine Datei die 54 Byte groß ist.

Bei der Variante mit ImageEncoder funktioniert es.
PB v5.72 x86/x64
Windows 10 Pro 64bit
Antworten