![]() |
Re: Fernsehrauschen zeichnen?
Zitat:
Zitat:
|
Re: Fernsehrauschen zeichnen?
Zitat:
Zitat:
|
Re: Fernsehrauschen zeichnen?
Zitat:
Zitat:
|
Re: Fernsehrauschen zeichnen?
Zitat:
|
Re: Fernsehrauschen zeichnen?
:idea: :oops:
PS: wers noch net bemerkt hat, OT und ironisch |
Re: Fernsehrauschen zeichnen?
wie macht man das mit threads?
Mehrere erstellen und von da aus dann jeweils einen Timer erstellen? Oo |
Re: Fernsehrauschen zeichnen?
für Threads gibt es ein Tutorial von Luckie, das findest Du hier
![]() Grüße Klaus |
Re: Fernsehrauschen zeichnen?
Oder du guckst im "Demos" - Ordner deines Delphi. Da müsste auch 'ne Thread - Demo drinne sein.
|
Re: Fernsehrauschen zeichnen?
Ok ich habs mal probiert so testweise.
Wenn ich folgendes mache (ohne Threads) :
Delphi-Quellcode:
Ich starte das Programm, und wenn die Form erscheint, dann ist bereits das fertig gezeichnete Bild zu sehen.
procedure TForm1.Snow(image: Timage);
var i,j,r:integer; begin For i := 1 to Image.Width do For j := 1 to Image.height do begin r := random(256); Image.Canvas.Pixels[i,j] := RGB(r,r,r); application.ProcessMessages; end; end; procedure TForm1.FormCreate(Sender: TObject); begin Randomize; Snow(Image); end; Wenn ich jetzt aber ein Thread-Object erstelle :
Delphi-Quellcode:
und dieses dann erzeuge mit :
constructor Tsnow.Create(image: TImage);
begin FImage := image; inherited Create(False); end; procedure Tsnow.Execute; begin Snow(FImage); end; procedure Tsnow.SetPixels; var r : Integer; begin r := Random(256); FImage.Canvas.Pixels[FX,FY] := RGB(r,r,r) end; procedure Tsnow.Snow(image: Timage); var i,j:integer; begin For i := 1 to FImage.Width do For j := 1 to FImage.height do begin FX := i; FY := j; Synchronize(SetPixels); application.ProcessMessages end; end;
Delphi-Quellcode:
dann kann ich schön zugucken, wie Linie für Linie gezeichnet wird und es dauert etwa 20 Sekunden bis das Image gefüllt ist....
tsnow.Create(Image);
Mache ich was falsch? |
Re: Fernsehrauschen zeichnen?
Delphi-Quellcode:
Solltest du besser so schreiben:
For i := 1 to FImage.Width do
For j := 1 to FImage.height do begin FX := i; FY := j; Synchronize(SetPixels); application.ProcessMessages end; end;
Delphi-Quellcode:
Sonst wird Application.ProcessMessages bei jedem (!) Pixel ausgeführt,
For i := 1 to FImage.Width do
For j := 1 to FImage.height do begin FX := i; FY := j; Synchronize(SetPixels); end; end; application.ProcessMessages; was der Geschwindigkeit nicht gerade zuträglich ist ;) Und wenn du ein Rauschen haben willst solltest du ins Execute schreiben:
Delphi-Quellcode:
Dadurch wird Show() solange ausgeführt, bis du deinen Tread beendest/zerstörst.
while not Terminated do begin
Snow(FImage); end; (Thread.Terminate) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz