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:

Screenshot

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Keks



Anmeldungsdatum: 03.11.2007
Beiträge: 156
Wohnort: Dose

BeitragVerfasst am: 31.12.2009, 15:35    Titel: Screenshot Antworten mit Zitat

Code:
#Include "windows.bi"
#Include "win/GdiPlus.bi"
Using gdiplus

Dim As GdiplusStartupInput gdipsi
Dim As ULONG_PTR gdipToken

Dim As HWND hWnd
Dim As HDC hDDC, hCDC
Dim As HBITMAP hBMP
Dim As GpBitmap Ptr image

Dim as Integer x, y, w, h
w = 100
h = 100

gdipsi.GdiplusVersion = 1
GdiplusStartup(@gdipToken, @gdipsi, NULL)

hWnd = GetDesktopWindow()
hDDC = GetDC(hWnd)
hCDC = CreateCompatibleDC(hDDC)

hBMP = CreateCompatibleBitmap(hDDC, w, h)
SelectObject(hCDC, hBMP)
BitBlt(hCDC, 0, 0, w, h, hDDC, x, y, SRCCOPY)

GdipCreateBitmapFromHBITMAP(hBMP, NULL, @image)
' Weiterarbeiten mit image

ReleaseDC(hWnd, hDDC)
DeleteDC(hCDC)
DeleteObject(hBMP)
GdipDisposeImage(image)
GdiplusShutdown(gdipToken)


Dieser Code soll einen 100x100-Ausschnitt vom Bildschirm nehmen.
Mit image sollten dann Pixel ausgelesen oder das Bild gespeichert werden.

Problem: image ist leer. Den Code habe ich von einem funktionierendem Autoit-Script übernommen, ich weiß leider nicht wo irgendwas nicht stimmt.
_________________
RUN "brain.exe"
Datei nicht gefunden
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 31.12.2009, 16:32    Titel: Antworten mit Zitat

image ist ein Pointer und der ist nicht NULL sondern zeigt auf ein Bitmap.
Dies ist aber kein FBgfx - Image!
Code:
'mit fbc -s gui kompiliert wird kein Konsolefenster erzeugt
#INCLUDE ONCE "windows.bi"
#INCLUDE ONCE "win/GdiPlus.bi"
USING gdiplus 'NAMESPACE
 
#MACRO MB_Error( text ) 'Fehlermeldungen
MessageBox( FindWindow(0, 0), text, "Fehler:", MB_OK OR MB_ICONERROR )
#EndMacro

FUNCTION GetEncoderClsid( sFormat AS STRING, BYREF temp_clsid AS CLSID ) AS INTEGER
  DIM AS ImageCodecInfo PTR pImageCodecInfo
  DIM AS UINTEGER numEncoders, size

  GdipGetImageEncodersSize( @numEncoders, @size )
  pImageCodecInfo = CALLOCATE( size )
  IF GdipGetImageEncoders( numEncoders, size, pImageCodecInfo )=0 THEN

    FOR i AS INTEGER = 0 TO numEncoders - 1
      IF *CAST(WSTRING PTR,pImageCodecInfo[i].FormatDescription) = sFormat THEN
        temp_clsid = pImageCodecInfo[i].clsid
        FUNCTION = 1
      END IF
    NEXT
  ENDIF
  IF pImageCodecInfo <> 0 THEN DEALLOCATE( pImageCodecInfo )
END FUNCTION

DIM AS GdiplusStartupInput gdipsi
DIM AS ULONG_PTR gdipToken

DIM AS HWND hWnd
DIM AS HDC hDDC, hCDC
DIM AS HBITMAP hBMP
DIM AS GpBitmap PTR image

DIM AS INTEGER x, y, w, h
w = 100
h = 100

gdipsi.GdiplusVersion = 1 'GdiplusVersion auf 1 setzen
GdiplusStartup( @gdipToken, @gdipsi, NULL )'Initialisieren

hWnd = GetDesktopWindow()
hDDC = GetDC(hWnd)
hCDC = CreateCompatibleDC(hDDC)

hBMP = CreateCompatibleBitmap(hDDC, w, h)
SelectObject(hCDC, hBMP)
BitBlt(hCDC, 0, 0, w, h, hDDC, x, y, SRCCOPY)

GdipCreateBitmapFromHBITMAP(hBMP, NULL, @image)


' Weiterarbeiten mit image
' als bmp speichern
DIM m_clsid AS CLSID
DIM AS STRING dformat="BMP" 'PNG , JPEG , GIF , TIFF , PNG
DIM AS WSTRING *12 fn1 = "Test.bmp"', fn2 = "Test.png"

IF GetEncoderClsid ( dformat, m_clsid ) = 0 THEN
  MB_Error( "Unbekanntes Dateiformat!" )
ELSE
  IF GdipSaveImageToFile( image, fn1, @m_clsid , NULL ) <> 0 THEN
    MB_Error( "Datei "+fn1+" konnte nicht gespeichert werden!" )
  ELSE
    MessageBox( 0, fn1+" als "+fn1+" gespeichert!", "GDI+ hat", MB_OK OR MB_ICONINFORMATION )
  ENDIF
ENDIF


ReleaseDC(hWnd, hDDC)
DeleteDC(hCDC)
DeleteObject(hBMP)
GdipDisposeImage(image)
GdiplusShutdown(gdipToken)

ScreenRes w,h,32
BLoad fn1
sleep

_________________
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
funkeld
gesperrt


Anmeldungsdatum: 10.10.2009
Beiträge: 179

BeitragVerfasst am: 01.01.2010, 15:53    Titel: Antworten mit Zitat

http://forum.qbasic.at/viewtopic.php?t=6817

Hallo Volta, grüss dich.

Wie könnte man dein Programm auf mein Irrlichtfenster umlenken?

Gruss
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Keks



Anmeldungsdatum: 03.11.2007
Beiträge: 156
Wohnort: Dose

BeitragVerfasst am: 01.01.2010, 16:55    Titel: Antworten mit Zitat

Ah, ich hatte den Code umsortiert. Vorher sah das an einer Stelle so aus:

Code:
GdipCreateBitmapFromHBITMAP(hBMP, NULL, @image)
DeleteObject(hBMP)


Macht natürlich Sinn, dass mit image dann nichts mehr ging.
_________________
RUN "brain.exe"
Datei nicht gefunden
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 02.01.2010, 11:48    Titel: Antworten mit Zitat

@Keks
ich hoffe es hat dir etwas geholfen!

@funkheld
keine Ahnung, ich kenne mich mit Irrlicht nicht aus!
_________________
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 -> Allgemeine Fragen zu FreeBASIC. 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