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:

HBITMAP zu DIB?

 
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
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 22.02.2013, 02:35    Titel: HBITMAP zu DIB? Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
micha



Anmeldungsdatum: 09.12.2005
Beiträge: 72

BeitragVerfasst am: 22.02.2013, 10:57    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 22.02.2013, 10:58    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
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