Seite 1 von 1

Image aus Clipboard in eine Datei speichern

Verfasst: 07.02.2006 19:29
von teachco
Hallo Puristen,

bei diesem Problem komme ich nicht weiter.
- Ein bmp-Image ist im Clipboard.
- Dieses möchte ich in die Datei C:\Testfoto.bmp speichern.
- Das Clipboard gibt die ImageID zurück.
- SaveImage kann aber nur mit #Image arbeiten und kann mit
der ImageID nichts anfangen.
- Der Befehl UseImage funktioniert leider genau falsch herum und den
Befehl, der umgekehrt arbeitet, gibt es nicht.
Bsp: ImageID = UseImage(#Image)

Weiß jemand Rat oder hat einen anderen Ansatz?

Gruß
Andi

Code: Alles auswählen

ImgID = GetClipboardData(#PB_ClipboardImage)
      If ImgID <> 0 
        StartDrawing( WindowOutput() ) 
           DrawImage(ImgID, 200, 200, 132, 105)
           ;GetBitmapBits_(ImgID, 41634, Buffer) ???
           SaveImage(ImgID, "C:\Testfoto.bmp") ; FALSCH !!!
        StopDrawing()
      EndIf
[/list]

Verfasst: 07.02.2006 19:32
von Macros
Quelle: Codearchiv

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

Hat funktioniert

Verfasst: 07.02.2006 19:58
von teachco
Danke für den Hinweis. Das Programm habe ich im Codearchiv übersehen. Der Tipp hat super weitergeholfen.

Noch ein Hinweis für andere Nutzer:
hBitmap im Aufruf sollte man nicht umbenennen, sonst meldet sich die Prozedur mit einem Fehler.