Canvas auslesen? (was nicht von BMax reingeschrieben wurde)
Übersicht

![]() |
Suco-XBetreff: ..... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Habe dir da mal was kleines vorbereitet:
Code: [AUSKLAPPEN] Strict Function GetDesktopData:Byte Ptr(MemSize:Int Var, ImgWidth:Int Var, ImgHeight:Int Var) Extern "Win32" Function GetDIBits(hdc:Int, bitmap:Int, Start:Int, Num:Int, bits:Byte Ptr, lpbi:Byte Ptr, usage:Int) Function CreateCompatibleBitmap(hdc:Int, Width:Int, Height:Int) Function CreateDIBSection(hdc:Int, pbmi:Byte Ptr, usage:Int, Bits:Byte Ptr, hSection:Int, Offset:Int) Function SelectObject(hdc:Int, obj:Int) Function CreateCompatibleDC(hdc:Int) Function GetDesktopWindow() Function GetWindowDC(hwnd:Int) Function GetDeviceCaps(hdc:Int, index:Int) Function DeleteDC(hdc:Int) Function DeleteObject(obj:Int) Function ReleaseDC(hwdn:Int, hdc:Int) Function BitBlt(hdc:Int,x:Int,y:Int,w:Int,h:Int,src_dc:Int,src_x:Int,src_y:Int,dwrop:Int) End Extern ?Win32 Type BITMAPINFO Field biSize:Int Field biWidth:Int Field biHeight:Int Field biPlanes:Short Field biBitCount:Short Field biCompression:Int Field biSizeImage:Int Field biXPelsPerMeter:Int Field biYPelsPerMeter:Int Field biClrUsed:Int Field biClrImportant:Int Field R:Byte Field G:Byte Field B:Byte Field Res:Byte End Type Const HORZRES:Int = 8 Const VERTRES:Int = 10 Local HwndDesktop:Int Local hdcDesktop:Int Local hdcMem:Int Local DesktopWidth:Int Local DesktopHeight:Int Local bmpMem:Int Local INFO:BITMAPINFO HwndDesktop = GetDesktopWindow() If Not HwndDesktop Return Null EndIf hdcDesktop = GetWindowDC(HwndDesktop) If Not HdcDesktop Return Null EndIf hdcMem = CreateCompatibleDC(hdcDesktop) If Not HdcMem Return Null EndIf DesktopWidth = GetDeviceCaps(hdcDesktop, HORZRES) DesktopHeight = GetDeviceCaps(hdcDesktop, VERTRES) If DesktopWidth = 0 Or DesktopHeight = 0 Return Null EndIf bmpMem = CreateCompatibleBitmap(hdcDesktop, DesktopWidth, DesktopHeight) If Not BmpMem Return Null EndIf If Not SelectObject(HdcMem, bmpMem) Return Null EndIf Info = New BITMAPINFO Info.bisize = SizeOf(INFO) info.BiWidth = DesktopWidth Info.biHeight = DesktopHeight Info.biPlanes = 1 info.biBitCount = 24 Info.biCompression = 0 Local Time:Int = MilliSecs() If Not BitBlt(hdcMem,0,0,Info.biWidth,Info.biHeight, hdcDesktop,0,0,ROP_SRCCOPY) Return Null EndIf Time = MilliSecs()-Time Print "BlitZeit: "+Time ImgWidth = Info.biWidth ImgHeight = Info.biHeight MemSize = (DesktopWidth*DesktopHeight)*3 Local mem:Byte Ptr = MemAlloc(MemSize) Time = MilliSecs() If Not GetDIBits(hdcMem, bmpMem, 0, Info.biHeight, Mem, info, 0) Return Null EndIf Time = MilliSecs()-Time Print "Zeit zum erhalten der Daten durch GetDIBits: "+Time DeleteDC(HdcMem) DeleteObject(bmpMem) ReleaseDC(hwndDesktop, hdcDesktop) Return Mem ? ?Linux Return Null ? ?MacOs Return Null ? End Function Local MemSize:Int, ImgWidth:Int, ImgHeight:Int Local Time_Data:Int, Time_Pixmap:Int Time_Data = MilliSecs() 'Desktop Daten werden abgeholt und wichtige Informationen werden in den übergebenen Variablen gespeichert Local Mem:Byte Ptr = GetDesktopData(MemSize, ImgWidth, ImgHeight) Time_Data = MilliSecs()-Time_data Print "Groesse der Bilddaten in Bytes: "+MemSize Print "Bildbreite: "+ImgWidth Print "Bildhoehe: "+ImgHeight Print "Zeit zum erhalten der Desktop Farbdaten: "+Time_Data Time_Pixmap = MilliSecs() 'Daten können übers Netzwerk verschickt werden. 'Die Pixmap wird wieder erstellt. Pitch ist BreiteDesBildes*BytesProByte. Da 24 bit, 3 bytes. Local Pixmap:TPixmap = CreateStaticPixmap(Mem, ImgWidth, ImgHeight, ImgWidth*3, PF_BGR888) Pixmap = YFlipPixmap(Pixmap) Time_Pixmap = MilliSecs()-Time_Pixmap Print "Zeit zum erstellen und Flippen der Pixmap: "+Time_Pixmap Graphics ImgWidth, ImgHeight,0 DrawPixmap Pixmap, 0,0 Flip WaitKey() Da werden alle Zeitdaten usw. aufgelistet. Es gibt noch die Möglichkeit, mit StretchBlt zu Blitten und die Ausgabe zu verkleinern. Würde bei der Übertragung vielleicht etwas Sinn machen, aber die Qualität leidet dann logischerweise drunter und StretchBlt ist langsamer. Wenn BitBlt langsamer war, muss dir wohl ein Fehler unterlaufen sein. Ist ja das gleiche wie dein CopyRect bei dem BPLus code. GetDIB kannst du mit dem auslesen via ReadPixelFast vergleichen, also schon enormer Speedboost. Mfg |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke, dein Code geht. ![]() ![]() ![]() Naja, werde mich wohl vorerst damit zufrieden geben ![]() Vielen Dank ![]() |
||
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group