Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Clipboard set/get..., wie ge_clip() anwenden und anzeigen ?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
funkeld
gesperrt


Anmeldungsdatum: 10.10.2009
Beiträge: 179

BeitragVerfasst am: 18.01.2011, 16:33    Titel: Clipboard set/get..., wie ge_clip() anwenden und anzeigen ? Antworten mit Zitat

Hallo habe eine Routine gefunden um ein Bmp-bild einzulesen und auszulesen. Nun möchte ich das Bild von "get_Clip()" gleich auf den Screen anzeigen.

Wie kann diesen Code erweitern, das get_clip() ein Bild aus dem Clipboard holt und es auf dem Screen anzeigt ?

Unten ist eine "bitblt" funktion, könnte man da etwas rausnehmen für oben bzw für die get_clip und auf dem Screen anzeigen?

Danke.

Code:


#Include "windows.bi"

declare Function get_clip() As Integer
declare Function set_clip() As Integer

Screen 18,32
set_clip()
Sleep

end

Function set_clip() As Integer
        Dim hBmp As Long
        hBmp=LoadImage(0,@"raupe.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE)
        OpenClipboard(0)
        EmptyClipboard()
        SetClipboardData(CF_BITMAP,CopyImage(hBmp,IMAGE_BITMAP,0,0,LR_COPYRETURNORG))
        CloseClipboard()
End Function

Function get_clip() As Integer
        Dim hBmp As Long
        If IsClipboardFormatAvailable(CF_BITMAP) = 0 Then Exit Function
        If OpenClipboard(0) = 0 Then Exit Function
        Return GetClipboardData(CF_BITMAP)
        CloseClipboard
End Function



hier ist eine "bitblt" funktion:

Code:

#include "fbgfx.bi"
#include "windows.bi"

#define CAPTUREBLT &H40000000

dim as integer w, h
dim as BITMAPINFO BitmapInfo
dim as HWND DSKWND = GetDesktopWindow( )

Dim as RECT r
GetClientRect( DSKWND, @r )
w = r.right - r.left
h = r.bottom - r.top

Dim as HDC display_dc      = GetDC( DSKWND )
dim as HDC bitmap_dc       = CreateCompatibleDC( display_dc )
dim as HBITMAP bitmap      = CreateCompatibleBitmap( display_dc, w, h )
dim as HGDIOBJ null_bitmap = SelectObject( bitmap_dc, bitmap )

BitBlt( bitmap_dc, 0, 0, w, h, display_dc, 0, 0, SRCCOPY or CAPTUREBLT )

ScreenRes 640, 480, 32

' Create the FB image buffer that the windows bitmap will be copied into
dim as fb.image ptr optr = imagecreate( w, h )

' force the pitch to be a mutiple of 4, incase FBGFX set it higher.  If it's not a multiple of 4, then getdibits may bork
optr->pitch = optr->width * 4

' Set up the bitmap header for the DIBITS, it's -h because otherwise it will be upside down
with BitmapInfo.bmiHeader
        .biSize     = sizeof(BITMAPINFOHEADER)
        .biWidth    = w
        .biHeight   = -h
        .biPlanes   = 1
        .biBitCount = 32
end with

' Now convert from the windows bitmap into the FBGFX buffer
getdibits( bitmap_dc, bitmap, 0, h, optr + 1, @BitmapInfo, DIB_RGB_COLORS )

' Clean up the windows resources
ReleaseDC( DSKWND, display_dc )
SelectObject( bitmap_dc, null_bitmap )
DeleteDC( bitmap_dc )
DeleteObject( bitmap )

Put(0, 0), optr
sleep
 
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
XOR



Anmeldungsdatum: 23.07.2010
Beiträge: 161

BeitragVerfasst am: 23.01.2011, 21:18    Titel: Antworten mit Zitat

Wenn du es noch nicht selbst herausgefunden hast:
Code:
Const w = 800
Const h = 600

#include "fbgfx.bi"
#Include "windows.bi"

declare Function get_clip() As Integer
declare Function set_clip() As Integer

ScreenRes w,h,32
set_clip()

Dim As BITMAPINFO BitmapInfo
Dim As HDC display_dc      = GetDC( Null )
Dim As HDC bitmap_dc       = CreateCompatibleDC( display_dc )
Dim As HBITMAP bitmap      = CreateCompatibleBitmap( display_dc, w, h )
Dim As HGDIOBJ null_bitmap = SelectObject( bitmap_dc, bitmap )

bitmap = get_clip()

Dim As fb.image Ptr optr = ImageCreate( w, h )
optr->pitch = optr->width * 4
With BitmapInfo.bmiHeader
   .biSize     = SizeOf(BITMAPINFOHEADER)
   .biWidth    = w
   .biHeight   = -h
   .biPlanes   = 1
   .biBitCount = 32
End with

getdibits( bitmap_dc, bitmap, 0, h, optr + 1, @BitmapInfo, DIB_RGB_COLORS )

SelectObject( bitmap_dc, null_bitmap )
DeleteDC( display_dc )
DeleteDC( bitmap_dc )
DeleteObject( bitmap )

Put(0, 0), optr
ImageDestroy(optr)
Sleep
end

Function set_clip() As Integer
        Dim hBmp As Long
        hBmp=LoadImage(0,@"raupe.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE)
        OpenClipboard(0)
        EmptyClipboard()
        SetClipboardData(CF_BITMAP,CopyImage(hBmp,IMAGE_BITMAP,0,0,LR_COPYRETURNORG))
        CloseClipboard()
        Return -1
End Function

Function get_clip() As Integer
        Dim hBmp As Long
        If IsClipboardFormatAvailable(CF_BITMAP) = 0 Then Exit Function
        If OpenClipboard(0) = 0 Then Exit Function
        Function = GetClipboardData(CF_BITMAP)
        CloseClipboard
End Function
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
funkeld
gesperrt


Anmeldungsdatum: 10.10.2009
Beiträge: 179

BeitragVerfasst am: 24.01.2011, 14:06    Titel: Antworten mit Zitat

Jup, danke.

Ich habe noch keine Lösung gefunden, weil ich mit den ganzen "dc" irgendwie die Reihenfolge nicht erkannt habe.

Deine Lösung funktioniert tadellos.

danke.

gruss
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz