Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Fernsehrauschen zeichnen? (https://www.delphipraxis.net/69987-fernsehrauschen-zeichnen.html)

pacman1986 23. Mai 2006 10:14

Re: Fernsehrauschen zeichnen?
 
Zitat:

Zitat von H4ndy
Threads sind glaub ich auch direkt mal Spatzen mit Kanonen abschießen ;)
Höstens einer würde hier passen, damit das Hauptprogramm nicht vom Zeichenvorgang
ausgebremst wird.

Ich habs Grad nachprogrammiert man merkt schon bei einem kleinen Bild das threads sinnvoll wären.

Zitat:

Zitat von H4ndy
Aso: Du erzeugst übrigends bunten Schnee ;)
Du musst für RGB dreimal den selben Wert benutzen, damit ein Grauwert entsteht.

:thumb: Ich mag Bunten Schnee :mrgreen:

H4ndy 23. Mai 2006 10:18

Re: Fernsehrauschen zeichnen?
 
Zitat:

Zitat von pacman1986
Ich habs Grad nachprogrammiert man merkt schon bei einem kleinen Bild das threads sinnvoll wären.

Gut, dass das direkt mal getestet wurde =)

Zitat:

Zitat von pacman1986
Ich mag Bunten Schnee

Denk dran: Niemals den gelben essen :mrgreen:

pacman1986 23. Mai 2006 10:21

Re: Fernsehrauschen zeichnen?
 
Zitat:

Zitat von H4ndy
Gut, dass das direkt mal getestet wurde =)

:thumb:
Zitat:

Zitat von H4ndy
Denk dran: Niemals den gelben essen :mrgreen:

Warum ? :gruebel:

Vjay 23. Mai 2006 10:23

Re: Fernsehrauschen zeichnen?
 
Zitat:

Zitat von pacman1986
Warum ? :gruebel:

Schonmal deinen Namen in den Schnee geschrieben?

pacman1986 23. Mai 2006 10:25

Re: Fernsehrauschen zeichnen?
 
:idea: :oops:
PS: wers noch net bemerkt hat, OT und ironisch

StefanG 23. Mai 2006 12:58

Re: Fernsehrauschen zeichnen?
 
wie macht man das mit threads?

Mehrere erstellen und von da aus dann jeweils einen Timer erstellen? Oo

Klaus01 23. Mai 2006 13:02

Re: Fernsehrauschen zeichnen?
 
für Threads gibt es ein Tutorial von Luckie, das findest Du hier http://www.michael-puff.de/dirindex....phi/Tutorials/

Grüße
Klaus

Daniel G 23. Mai 2006 13:06

Re: Fernsehrauschen zeichnen?
 
Oder du guckst im "Demos" - Ordner deines Delphi. Da müsste auch 'ne Thread - Demo drinne sein.

StefanG 23. Mai 2006 14:40

Re: Fernsehrauschen zeichnen?
 
Ok ich habs mal probiert so testweise.

Wenn ich folgendes mache (ohne Threads) :

Delphi-Quellcode:
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;
Ich starte das Programm, und wenn die Form erscheint, dann ist bereits das fertig gezeichnete Bild zu sehen.
Wenn ich jetzt aber ein Thread-Object erstelle :

Delphi-Quellcode:
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;
und dieses dann erzeuge mit :

Delphi-Quellcode:
tsnow.Create(Image);
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....
Mache ich was falsch?

H4ndy 23. Mai 2006 14:47

Re: Fernsehrauschen zeichnen?
 
Delphi-Quellcode:
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;
Solltest du besser so schreiben:
Delphi-Quellcode:
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;
Sonst wird Application.ProcessMessages bei jedem (!) Pixel ausgeführt,
was der Geschwindigkeit nicht gerade zuträglich ist ;)

Und wenn du ein Rauschen haben willst solltest du ins Execute schreiben:
Delphi-Quellcode:
while not Terminated do begin
  Snow(FImage);
end;
Dadurch wird Show() solange ausgeführt, bis du deinen Tread beendest/zerstörst.
(Thread.Terminate)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:12 Uhr.
Seite 2 von 3     12 3      

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