GrabImage

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

regaa

Betreff: GrabImage

BeitragDo, Feb 17, 2005 15:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Gibt es eine Routine die Schneller ist als Grabimage? Die Zeiten für ein Grab, sind hier auf dem lahmen laptop bei einem bild von 200*200 um die 43 ms. Hab zwar was mit LockImage und so probiert, aber da lag die Zeit bei ~70ms.

N paar Tipps wärn' cool.
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Vertex

BeitragDo, Feb 17, 2005 16:22
Antworten mit Zitat
Benutzer-Profile anzeigen
GrabImage benutzt intern GrabPixmap die wiederum glReadPixels benutzt. Insofern höchstens über MemCopy, wobei du den Ausschnitt Zeilenweise kopieren musst.

mfg olli
vertex.dreamfall.at | GitHub

regaa

BeitragDo, Feb 17, 2005 16:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, werd dies mal versuchen. Danke
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

regaa

BeitragFr, Feb 18, 2005 0:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Nö, werd es doch nicht.

MemCopy( dst:Byte Ptr,src:Byte Ptr,size )

sagt mir nicht viel. Wie bedien ich denn sowas, das ich da den Backbuffer irgendwie rauskopieren kann?
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net
 

Dreamora

BeitragFr, Feb 18, 2005 0:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Kannst ja sonst auch GrabPixmap nehmen.
Das ist schon gewaltig schneller als GrabImage, da das langsame die Konvertierung von Pixmap zu Image ist ( also aus einem Stream ein Bild erzeugen )

Images sind ja nicht für Echtzeitmanipulation ausgelegt aktuell.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

regaa

BeitragFr, Feb 18, 2005 9:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hört sich gut an, aber gezeichnet werden pixmap doch bedeudend langsamer, wol?
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net
 

Dreamora

BeitragFr, Feb 18, 2005 12:39
Antworten mit Zitat
Benutzer-Profile anzeigen
ja pixmap zeichnen ist rund 10x langsamer als image zeichnen, eben da pixmaps keine bilder sind sondern Rohdaten.

Was möchtest du denn genau machen?

Wenn du immer ma wieder was grabst aber net immer direkt für den Screen verwenden willst, wäre vielleicht grabpixmap und später daraus nen image machen eine möglichkeit.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

regaa

BeitragFr, Feb 18, 2005 17:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Geht um eine realtime Fenstervergrößer-Funktion.

Fenster erstellen als Image! dauert 38ms bei 200x200pixel, je höher desto langsamer wird es, 800*600 liegt man schon bei über 200ms. Und das ist unzumutbar.

Hier a bissel Code:
Code: [AUSKLAPPEN]

Method Rebuild(FLAG:Int=0)
      Local i:Int=0
      Local temp:TImage
      Local temp_time=MilliSecs()
      Local temp_string:String
      
      ' Local temp_time2=MilliSecs()
      ' Print (MilliSecs()-temp_time2)+" Befehl"
      
      ' TestPhase
      ' 69ms -147ms für ein Fenster aktuell wenn man upper_center[i] pixmapt'
      ' 61ms -141ms für ein Fenster aktuell wenn man settyle auslagert :)
      
      ' 660-670ms für das MAMA Fenster ' Auf 1Ghz Notebook
      ' 659-651ms für das MAMA Fenster ' Auf 1Ghz Notebook
      
      'Das Ziehen des Fensters wird aber um min. 20% schneller durch die Auslagerung'
      
      Title=Title_Save
      If (TextWidth(Title_Save)+30)>(W-70)
         For i=1 To Len(Title_Save)
            temp_string=temp_string+Mid(Title_Save,i,1)
            If TextWidth(temp_string+"...")+30>(W-70)
               Title=temp_string+"..."
               Exit
            EndIf
         Next
      EndIf
      
      If done_rebuild=True
         SetBlend ALPHABLEND
         
         Image=CreateImage(W,H,2, DYNAMICIMAGE | MASKEDIMAGE)
         SetViewport(0,0,W,H)
         
         For i=0 To 1
            ' UPPER_LEFT
            If FLAG = REBUILD_WINDOW_UPPERLEFT Or Flag=REBUILD_ALL
               SetViewport(0,0,ulw, ulh)
               Cls
               upper_left=CreateImage(ulw,ulh,1, DYNAMICIMAGE | MASKEDIMAGE)
               DrawImage STYLE_IMAGE[i],0,0
               GrabImage(upper_left,0,0)
            EndIf
            
            ' upper_center[i]
            If FLAG=REBUILD_WINDOW_UPPERCENTER Or Flag=REBUILD_ALL Or Flag=REBUILD_SHAPE Or Flag=REBUILD_HOR
               upper_center=CreateImage(W-ulw-urw,uch, 1, DYNAMICIMAGE | MASKEDIMAGE)
               TilePixmap(temp_upper_center[i],0,0,W-ulw-urw,uch)
               GrabImage(upper_center,0,0)
            EndIf
            
            ' UPPER_RIGHT
            If FLAG=REBUILD_WINDOW_UPPERRIGHT Or Flag=REBUILD_ALL
               SetViewport(0,0,urw,urh)
               Cls
               upper_right=CreateImage(urw,urh,1, DYNAMICIMAGE | MASKEDIMAGE)
               DrawImage STYLE_IMAGE[i],0-ulw-ucw,0
               GrabImage(upper_right,0,0)
            EndIf
            
            ' CENTER_LEFT
            If FLAG=REBUILD_WINDOW_CENTERLEFT Or Flag=REBUILD_ALL Or Flag=REBUILD_SHAPE  Or Flag=REBUILD_VER
               center_left=CreateImage(clw,H-ulh-blh, 1, DYNAMICIMAGE | MASKEDIMAGE)
               TilePixmap(temp_center_left[i],0,0,clw,H-ulh-blh)
               GrabImage(center_left,0,0)
            EndIf
            
            ' CENTER_CENTER
            If FLAG=REBUILD_WINDOW_CENTERCENTER Or Flag=REBUILD_ALL Or Flag=REBUILD_SHAPE  Or Flag=REBUILD_HOR  Or Flag=REBUILD_VER
               center_center=CreatePixmap(W-clw-crw,H-ulh-blh,PF_RGB888)
               TilePixmap(temp_center_center[i],0,0,W-clw-crw,H-ulh-blh)
               center_center=GrabPixmap(0,0, W-clw-crw,H-ulh-blh)
            EndIf
            
            ' CENTER_RIGHT
            If FLAG=REBUILD_WINDOW_CENTERRIGHT Or Flag=REBUILD_ALL Or Flag=REBUILD_SHAPE  Or Flag=REBUILD_VER
               center_right=CreateImage(crw,H-urh-brh, 1, DYNAMICIMAGE | MASKEDIMAGE)
               TilePixmap(temp_center_right[i],0,0,crw, H-urh-brh)
               GrabImage(center_right,0,0)
            EndIf
            
            ' BOTTOM_LEFT
            If FLAG=REBUILD_WINDOW_BOTTOMLEFT Or Flag=REBUILD_ALL
               SetViewport(0,0,blw, blh)
               Cls
               bottom_left=CreateImage(blw,blh,1, DYNAMICIMAGE | MASKEDIMAGE)
               DrawImage STYLE_IMAGE[i],0,0-urh-crh
               GrabImage(bottom_left,0,0)
            EndIf
            
            ' BOTTOM_CENTER
            If FLAG=REBUILD_WINDOW_BOTTOMCENTER Or Flag=REBUILD_ALL Or Flag=REBUILD_SHAPE  Or Flag=REBUILD_HOR
               bottom_center=CreateImage(W-blw-brw,bch, 1, DYNAMICIMAGE | MASKEDIMAGE)
               TilePixmap(temp_bottom_center[i],0,0, W-blw-brw, bch)
               GrabImage(bottom_center,0,0)
            EndIf
            
            ' BOTTOM_RIGHT
            If FLAG=REBUILD_WINDOW_BOTTOMRIGHT Or Flag=REBUILD_ALL
               SetViewport(0,0,brw, brh)
               Cls
               bottom_right=CreateImage(brw,brh,1, DYNAMICIMAGE | MASKEDIMAGE)
               DrawImage STYLE_IMAGE[i],0-blw-bcw,0-urh-crh
               GrabImage(bottom_right,0,0)
            EndIf
               
            SetViewport(0,0,W,H)
            Cls
            'SetColor 255,255,255
            
            DrawImage upper_left,0,0
            DrawImage upper_center,ulw,0
            DrawImage upper_right,W-urw,0
            DrawImage center_left,0,ulh
            DrawPixmap center_center,clw,uch
            DrawImage center_right,W-crw,urh
            DrawImage bottom_left,0,H-blh
            DrawImage bottom_center,blw,H-bch
            DrawImage bottom_right,W-brw,H-brh
            DrawImage IconImage,4,4
            SetAlpha 0.95
            If i=1
               SetColor 0,0,10
            Else
               SetColor 120,120,120
            EndIf
            
            DrawText Title,30,5
            SetAlpha 1.0
            SetColor 255,255,255
            
            GrabImage(Image,0,0,i)

            STYLE_IMAGE[i]=Null
            done_rebuild=False
            
         Next
         Print (MilliSecs()-temp_time)+" ZEIT"
         Return(True)
      EndIf
         
      If done_rebuild=False
         done_rebuild=True
         Message.Create(ROOT,Self,WM_REBUILD,0,0,0,0,0,0,Flag)
      EndIf
   End Method
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group