CopyImage Doppelt so schnell wie PB
Verfasst: 16.12.2006 15:35
Hi Leute
Da ich probleme mit CopyImage hatte, hab ich mir eine eigene Funktion gebastelt. Ich dachte immer, PB arbeite genau so.
Da ich den Performanceverlust und die Funktionstüchtigkeit rausfinden wollte, hab ich mir diese kleine Testumgebung gebastelt.
Tja und beim Test sind mir dann fast die Augen aus dem Kopf gefallen. Meins is doppelt so schnell wie das von PB. Ich hab ka, wovon das kommt, aber vielleicht hab ich ja was übersehen. Wenn ihr Fehler findet: BITTE MELDEN.
Achja, dank TS-Softs Tip hier noch n kleines Macro, dass die Native CopyImageFunktion von PB durch meine ersetzt:
Mit besten Grüßen
Der Recht verwunderte Franky

Da ich probleme mit CopyImage hatte, hab ich mir eine eigene Funktion gebastelt. Ich dachte immer, PB arbeite genau so.
Code: Alles auswählen
Procedure CopyAlphaImage(mp_bild1,mp_bild2)
If IsImage(mp_bild1)
GetImageDataPointer(ImageID(mp_bild1),mp_haltvar.BITMAP)
kpfm=CreateImage(mp_bild2,mp_haltvar\bmwidth,mp_haltvar\bmheight,mp_haltvar\bmbitspixel)
If kpfm
GetImageDataPointer(ImageID(mp_bild2),mp_haltvar2.BITMAP)
CopyMemory(mp_haltvar\bmbits,mp_haltvar2\bmbits,mp_haltvar\bmwidth*mp_haltvar\bmheight*mp_haltvar\bmBitspixel/8)
EndIf
EndIf
ProcedureReturn kpfm
EndProcedure
Code: Alles auswählen
Macro GetImageDataPointer(ImageID,Bild)
GetObject_(ImageID,SizeOf(Bitmap),Bild)
EndMacro
Procedure CopyAlphaImage(mp_bild1,mp_bild2)
If IsImage(mp_bild1)
GetImageDataPointer(ImageID(mp_bild1),mp_haltvar.BITMAP)
kpfm=CreateImage(mp_bild2,mp_haltvar\bmwidth,mp_haltvar\bmheight,mp_haltvar\bmbitspixel)
If kpfm
GetImageDataPointer(ImageID(mp_bild2),mp_haltvar2.BITMAP)
CopyMemory(mp_haltvar\bmbits,mp_haltvar2\bmbits,mp_haltvar\bmwidth*mp_haltvar\bmheight*mp_haltvar\bmBitspixel/8)
EndIf
EndIf
ProcedureReturn kpfm
EndProcedure
Macro LoadAlphaCompatibleImage(pqrs_id,pqrs_name);Nur wichtig, wenn man jedes Bild in 32 Bit haben will
anfid=LoadImage(#PB_Any,pqrs_name)
If CreateImage(pqrs_id,ImageWidth(anfid),ImageHeight(anfid),32)
StartDrawing(ImageOutput(pqrs_id))
DrawImage(ImageID(anfid),0,0)
StopDrawing()
FreeImage(anfid)
EndIf
EndMacro
LoadImage(5,"NormalBild.bmp")
k1=GetTickCount_()
For a=1 To 1000
CopyImage(5,3)
FreeImage(3)
Next
k2=GetTickCount_()
For a=1 To 1000
CopyAlphaImage(5,3)
FreeImage(3)
Next
k3=GetTickCount_()
MessageRequester("Ergebnisse:","PB: "+Str(k2-k1)+Chr(13)+"Ich: "+Str(k3-k2))
If OpenWindow(1,20,20,800,700,"Vergleich")
CreateGadgetList(WindowID(1))
CopyImage(5,3)
CopyAlphaImage(5,4)
TextGadget(#PB_Any,0,0,400,20,"Originalbild")
ImageGadget(#PB_Any,0,20,400,300,ImageID(5))
TextGadget(#PB_Any,400,0,400,20,"Meine Kopie")
ImageGadget(#PB_Any,400,20,400,300,ImageID(4))
TextGadget(#PB_Any,0,340,400,20,"PBs Kopie")
ImageGadget(#PB_Any,0,360,400,300,ImageID(3))
Repeat
event=WaitWindowEvent()
Until event=#WM_CLOSE
EndIf
End
Tja und beim Test sind mir dann fast die Augen aus dem Kopf gefallen. Meins is doppelt so schnell wie das von PB. Ich hab ka, wovon das kommt, aber vielleicht hab ich ja was übersehen. Wenn ihr Fehler findet: BITTE MELDEN.
Achja, dank TS-Softs Tip hier noch n kleines Macro, dass die Native CopyImageFunktion von PB durch meine ersetzt:
Code: Alles auswählen
Macro CopyImage(bild1,bild2)
CopyAlphaImage(bild1,bild2)
EndMacro
Mit besten Grüßen
Der Recht verwunderte Franky
