Seite 1 von 1

Image im Clipboard abspeichern

Verfasst: 07.04.2006 02:07
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

Verfasst: 08.04.2006 13:30
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

Verfasst: 11.04.2006 14:29
von Xaby