|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
funkeld gesperrt
Anmeldungsdatum: 10.10.2009 Beiträge: 179
|
Verfasst am: 18.01.2011, 15:33 Titel: Clipboard set/get..., wie ge_clip() anwenden und anzeigen ? |
|
|
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 |
|
|
XOR
Anmeldungsdatum: 23.07.2010 Beiträge: 161
|
Verfasst am: 23.01.2011, 20:18 Titel: |
|
|
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 |
|
|
funkeld gesperrt
Anmeldungsdatum: 10.10.2009 Beiträge: 179
|
Verfasst am: 24.01.2011, 13:06 Titel: |
|
|
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 |
|
|
|
|
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.
|
|