 |
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 |
Keks
Anmeldungsdatum: 03.11.2007 Beiträge: 156 Wohnort: Dose
|
Verfasst am: 31.12.2009, 15:35 Titel: Screenshot |
|
|
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 |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 31.12.2009, 16:32 Titel: |
|
|
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 |
|
 |
funkeld gesperrt
Anmeldungsdatum: 10.10.2009 Beiträge: 179
|
|
Nach oben |
|
 |
Keks
Anmeldungsdatum: 03.11.2007 Beiträge: 156 Wohnort: Dose
|
Verfasst am: 01.01.2010, 16:55 Titel: |
|
|
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 |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 02.01.2010, 11:48 Titel: |
|
|
@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 |
|
 |
|
|
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.
|
|