Image im Clipboard abspeichern

Anfängerfragen zum Programmieren mit PureBasic.
DeltaG
Beiträge: 112
Registriert: 10.09.2004 18:15

Image im Clipboard abspeichern

Beitrag von DeltaG »

Hallo!

Es gibt bereits einen Thread darüber im Forum 'Allgemein', trotzdem frage ich als Anfänger lieber hier mal dazu nach.

In dem besagten Thread wird folgender Code angesprochen, mit dem ein im Clipboard vorhandenes Image abgespeichert werden kann:

Code: Alles auswählen

; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=2766 
; Author: freak 
; Date: 08. November 2003 

Procedure RegisterBitmap(ImageNumber, hBitmap) 
  Protected *lptr.LONG, *wptr.WORD, BitmapData.BITMAP  
  GetObject_(hBitmap, SizeOf(BITMAP), @BitmapData)  
  
  !extrn _PB_Image_ObjectsArea 
  !mov eax, [_PB_Image_ObjectsArea] 
  !mov [esp+8], eax  
  
  *lptr + ImageNumber * 14 
  *lptr\l = hBitmap  
  *wptr = *lptr + 4 
  *wptr\w = BitmapData\bmWidth 
  *wptr + 2 
  *wptr\w = BitmapData\bmHeight 
  *wptr + 2 
  *wptr\w = BitmapData\bmBitsPixel 
  *lptr = *wptr + 2 
  *lptr\l = BitmapData\bmBits    
EndProcedure 

; beispiel 

hBitmap = GetClipboardData(#PB_ClipboardImage) 
If hBitmap 
  RegisterBitmap(0, hBitmap) 
  SaveImage(0, "C:\program\test.bmp") 
Else 
  Debug "Currently there is no image in the clipboard!" 
EndIf 
End
Unabhängig davon, daß in der von mir verwendeten PB-Version 4b9 der Befehl 'GetClipboardData' jetzt wohl 'GetClipboardImage' heißt, bricht der Compiler/Linker in der Zeile ' !extrn _PB_Image_ObjectsArea' mit der Fehlermeldung ab:
POLINK: error: Unresolved external symbol '_PB_Image_ObjectsArea'.
POLINK: fatal error: 1 unresolved external(s).
Meine Frage ist jetzt: Woher bekomme ich Informationen über und zu diesem externen Symbol, damit ich die Prozedur in einem Programm verwenden kann?

DeltaG
DeltaG
Beiträge: 112
Registriert: 10.09.2004 18:15

Beitrag von DeltaG »

Nun gut.

Ich habe das Problem anderweitig gelöst.

Code: Alles auswählen


Procedure CaptureScreen(Left.l, Top.l, Width.l, Height.l)
  dm.DEVMODE ;structure for CreateDC()
  srcDC.l
  trgDC.l
  BMPHandle.l
  srcDC = CreateDC_("DISPLAY", "", "", dm)
  trgDC = CreateCompatibleDC_(srcDC)
  BMPHandle = CreateCompatibleBitmap_(srcDC, Width, Height)
  SelectObject_( trgDC, BMPHandle)
  BitBlt_( trgDC, 0, 0, Width, Height, srcDC, Left, Top, #SRCCOPY)
  OpenClipboard_(#Null) 
  EmptyClipboard_()
  SetClipboardData_(2, BMPHandle)
  CloseClipboard_()
  DeleteDC_( trgDC)
  ReleaseDC_( BMPHandle, srcDC)
  ProcedureReturn
EndProcedure; CaptureScreen()


.
.
.
    OpenClipboard_(#Null) 
    ciHwnd.l = GetClipboardImage(#CF_BITMAP) 
    
    If ciHwnd 
      GetObject_(ciHwnd, SizeOf(BITMAP), bm.BITMAP) 
      CreateImage(0, bm\bmWidth, bm\bmHeight) 
      StartDrawing(ImageOutput(0)) 
      DrawImage(ciHwnd, 0, 0) 
      StopDrawing() 
      SaveImage(0, DateiName$, #PB_ImagePlugin_BMP) 
    EndIf
.
.
.
Vielleicht hilft's ja jemandem.

DeltaG
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Kinder an die Macht http://scratch.mit.edu/
Antworten