Naja, der Anfang sieht ja sehr eintönig aus. Man könnte ja gleich mit dem Raster von
Code: Alles auswählen
EnableExplicit
CreateImage(1,400,110,24)
CreateImage(2,400,110,24)
Define i.l
Procedure Thread()
Static LineYCounter=25 , LineYCounter2
Static Zufall , oldMedian , first = #False
Static Dim Daten(4)
Define n
Dim median(4)
If first = #False ;
For n =0 To 4 ; Beim Ersten mal
Daten(n)=Random(100) ; DatenArray
Next ; füllen
first = #True ;
EndIf ;
FreeImage(2)
CopyImage(1,2)
If StartDrawing(ImageOutput(1))
Box(0,0,ImageWidth(1),ImageHeight(1),RGB(0,0,0))
Line(ImageWidth(1)-1,5,1,1,RGB(0,100,0))
Line(ImageWidth(1)-1,30,1,1,RGB(0,100,0))
Line(ImageWidth(1)-1,55,1,1,RGB(0,100,0))
Line(ImageWidth(1)-1,80,1,1,RGB(0,100,0))
Line(ImageWidth(1)-1,105,1,1,RGB(0,100,0))
If LineYCounter=25
Line(ImageWidth(1)-1,5,1,100,RGB(0,100,0))
LineYCounter=0
Else
LineYCounter+1
EndIf
DrawImage(ImageID(2), -1, 0)
If LineYCounter2=4
LineYCounter2=0
CopyArray(Daten(), median())
SortArray(median(),#PB_Sort_Ascending)
Debug Str(Daten(0))+" "+Str(Daten(1))+" "+Str(Daten(2))+" "+Str(Daten(3))+" "+Str(Daten(4))+" | " +Str(median(0))+" "+Str(median(1))+" >"+Str(median(2))+"< "+Str(median(3))+" "+Str(median(4))+" "
LineXY(ImageWidth(1)-5,105-Daten(1) ,ImageWidth(1)-1,105- Daten(2),RGB(175,0,0)) ;Ungefiltert
;Plot (ImageWidth(1)-5,105-Daten(2), RGB(255,0,0)) ;Ungefiltert
LineXY(ImageWidth(1)-5,105-oldMedian,ImageWidth(1)-1,105-median(2),RGB(0,255,0)) ;Median-Filter
oldMedian = median(2)
MoveMemory(@Daten(1), @Daten(0), 4*SizeOf(Integer))
Daten(4)=Random(100)
Else
LineYCounter2+1
EndIf
StopDrawing()
EndIf
SetGadgetState(1,ImageID(1))
EndProcedure
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
Procedure TimerCB(hWnd, uMsg, idEvent, dwTime)
If idEvent = 1
Thread()
EndIf
EndProcedure
CompilerEndIf
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ContainerGadget(2,10,10,395,110,0)
ImageGadget(1,0,0,0,0,ImageID(1),0)
CloseGadgetList()
StartDrawing(ImageOutput(1))
For i=5 To 105 Step 25 ; hier ein Anfangsraster
LineXY(0,i,400,i,RGB(0,100,0))
Next i
For i=1 To 15
LineXY(i*25,5,i*25,105,RGB(0,100,0))
Next i
StopDrawing()
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
SetTimer_(WindowID(0), 1, 100, @TimerCB())
CompilerElse
AddWindowTimer(0, 1, 100)
CompilerEndIf
Repeat
Select WaitWindowEvent()
CompilerIf #PB_Compiler_OS <> #PB_OS_Windows
Case #PB_Event_Timer
If EventTimer() = 1 : Thread() : EndIf
CompilerEndIf
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf