|
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 |
Eternal_pain
Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 22.02.2013, 02:35 Titel: HBITMAP zu DIB? |
|
|
Nach der Idee einen Screenshot vom Desktop zu machen wollte ich das mal 'schnell' probieren, komme aber leider nicht ganz mit der WinAPI zurecht wie ich wo was ganz genau deklarieren muss um an die 'rohen' bytes des Bitmaps zu kommen...
Code: |
#include "windows.bi"
Dim as Integer nScreenWidth
Dim as Integer nScreenHeight
Screeninfo nScreenWidth, nScreenHeight
Dim as HWND hDesktopWnd = GetDesktopWindow()
Dim as HDC hDesktopDC = GetDC(hDesktopWnd)
Dim as HDC hCaptureDC = CreateCompatibleDC(hDesktopDC)
Dim as HBITMAP hCaptureBitmap = CreateCompatibleBitmap(hDesktopDC, nScreenWidth, nScreenHeight)
SelectObject(hCaptureDC, hCaptureBitmap)
BitBlt(hCaptureDC, 0, 0, nScreenWidth, nScreenHeight, hDesktopDC, 0, 0,SRCCOPY)
''hier weiss ich nicht ganz weiter...
Dim as any ptr fbBuffer = callocate((nScreenWidth*nScreenHeight)*4)
?GetDIBits(hDesktopDC, hCaptureBitmap, ?, ?, fbBuffer, ?, ?)
ReleaseDC(hDesktopWnd,hDesktopDC)
DeleteDC(hCaptureDC)
DeleteObject(hCaptureBitmap)
Deallocate(fbBuffer)
sleep
|
Hab mir zwar auch hier: http://msdn.microsoft.com/en-us/library/dd144879%28v=vs.85%29.aspx
schon durchgelesen aber leider nicht verstanden... _________________
|
|
Nach oben |
|
|
micha
Anmeldungsdatum: 09.12.2005 Beiträge: 72
|
Verfasst am: 22.02.2013, 10:57 Titel: |
|
|
1.) Mit GetDC(NULL) bekommst Du den DeviceContext from "default" Desktop.
2.) fbImage erstellen mit ScreenWidth,ScreenHeight (von ScreenInfo)
3.) in Y,X Scheife mit GetPixel() und PSet() die RGB Werte in das fbImage kopieren.
4.) nicht vergessen den Desktop DC wieder frei geben
tip: Wenn Farben nicht stimmen dann must Du die rot und blau Werte tauschen BGR nach RGB
micha
Zuletzt bearbeitet von micha am 22.02.2013, 11:13, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 22.02.2013, 10:58 Titel: |
|
|
Hi,
hier ein paar Hinweise
http://www.freebasic-portal.de/code-beispiele/grafik-und-fonts/screenshot-erstellen-grafikimage-139.html
http://www.freebasic-portal.de/code-beispiele/system/zwischenablage-lesen-schreiben-2-bilder-228.html
Code: | Dim Shared As Any Ptr img
Function CaptureWindow( ByVal hwndSrc As HWND) As Any Ptr
'AbNachVorn(hWndSrc)
Dim As RECT r
GetWindowRect(hWndSrc, @r) 'Fenstergroesse feststellen
Dim As Integer b = r.right - r.left
Dim As Integer h = r.bottom - r.top
img = ImageCreate(b, h)
b = (b+3) And -4 'Bildbreite glatt durch 4 teilbar
Dim As HDC hdcSrc = GetWindowDC(hWndSrc)
Dim As HDC hdcMem = CreateCompatibleDC(hdcSrc)
Dim As HBITMAP hBmp = CreateCompatibleBitmap(hdcSrc, b, h)
SelectObject(hdcMem, hBmp)
BitBlt(hdcMem, 0, 0, b, h, hdcSrc, 0, 0, SRCCOPY)
Dim As BITMAPINFO bmi
With bmi.bmiHeader
.biSize = SizeOf(BITMAPINFOHEADER)
.biWidth = b 'breite
.biHeight = -h '-hoehe (sonst Kopfstand)
.biPlanes = 1
.biCompression = BI_RGB
.biBitCount = 32
End With
If (img) Then 'Bilddaten in das Image kopieren
GetDIBits(hdcMem, hBmp, 0, h, img + 32, @bmi, DIB_RGB_COLORS)
End If
DeleteObject(hBmp)
DeleteDC(hdcMem)
ReleaseDC(hWndSrc, hdcSrc)
Return img
End Function |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
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.
|
|