AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

laufende sinus-Kurve

Ein Thema von faux · begonnen am 20. Mai 2004 · letzter Beitrag vom 22. Mai 2004
Antwort Antwort
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#1

laufende sinus-Kurve

  Alt 20. Mai 2004, 11:12
Hallo!

Ich hab mal mit dem Source eine laufende Sinuskurve gemacht:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
const
  b = 53;
var
  i: Integer;
begin
  with Form1 do
  begin
    Canvas.MoveTo(Width, Height);
      for i := Width downto -100 do
        if a <> 0 then
          Canvas.Pixels[i+a-1, round((sin(i * 0.12)) * 16)+16] := Color
        else
          Canvas.Pixels[i+b-1, round((sin(i * 0.12)) * 16)+16] := Color;
    Canvas.MoveTo(Width, Height);
      for i := Width downto -100 do
        Canvas.Pixels[i+a, round((sin(i * 0.12)) * 16)+16] := clBlack;
  end;
  inc(a);
  if a = b then
    a := 0;
end;
nur hab ich jetzt ein paar fragen:

1. Das Bild flimmert/ruckelt ein wenig. Ich glaube das liegt an meinem Quelltext. Wie kann ich das ändern? Meine Lösung ist nämlich sicherlich nicht die optimale Lösung.

2. Wie kann ich die Kurve runder (also nicht so eckig (pixelig)) machen?

Danke schon mal...
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: laufende sinus-Kurve

  Alt 20. Mai 2004, 11:36
Zitat:
1. Das Bild flimmert/ruckelt ein wenig. Ich glaube das liegt an meinem Quelltext. Wie kann ich das ändern?
Stichwort: Hier im Forum suchenBitBlt.

Nachtrag: Zusätzlich noch die Form auf DoubleBuffered := True; setzen


Nachtrag2:

Ok, hier dann mal ein Beispiel:

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
const
  b = 53;
  a: Integer = 40;
var
  i: Integer;
  bmp: TBitmap;
begin
    bmp := TBitmap.Create;
    try
      bmp.Canvas.Font.Assign(Canvas.Font);
      bmp.Width := Width;
      bmp.Height := Height;

      bmp.Canvas.MoveTo(Width, Height);
      for i := Width downto -100 do
        if a <> 0 then
          bmp.Canvas.Pixels[i + a - 1, Round((sin(i * 0.12)) * 16) + 16] := Color
      else
        bmp.Canvas.Pixels[i + b - 1, Round((sin(i * 0.12)) * 16) + 16] := Color;
      bmp.Canvas.MoveTo(Width, Height);
      for i := Width downto -100 do
        bmp.Canvas.Pixels[i + a, Round((sin(i * 0.12)) * 16) + 16] := clBlack;

      BitBlt(Canvas.Handle,
        0, 0,
        bmp.Width,
        bmp.Height,
        bmp.Canvas.Handle,
        0, 0,
        SRCCOPY
        );

    finally
      bmp.Free;
    end;
  a := a + 1;
  if a = b then
    a := 0;
end;
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: laufende sinus-Kurve

  Alt 22. Mai 2004, 11:53
Danke für das Beispiel!

Nur gibts einen kleien Fehler:

Zitat von toms:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
const
  b = 53;
  a: Integer = 40;
var
  i: Integer;
  bmp: TBitmap;
begin
    bmp := TBitmap.Create;
    try
      bmp.Canvas.Font.Assign(Canvas.Font);
      bmp.Width := Width;
      bmp.Height := Height;

      bmp.Canvas.MoveTo(Width, Height);
      for i := Width downto -100 do
        if a <> 0 then
          bmp.Canvas.Pixels[i + a - 1, Round((sin(i * 0.12)) * 16) + 16] := Color
      else
        bmp.Canvas.Pixels[i + b - 1, Round((sin(i * 0.12)) * 16) + 16] := Color;
      bmp.Canvas.MoveTo(Width, Height);
      for i := Width downto -100 do
        bmp.Canvas.Pixels[i + a, Round((sin(i * 0.12)) * 16) + 16] := clBlack;

      BitBlt(Canvas.Handle,
        0, 0,
        bmp.Width,
        bmp.Height,
        bmp.Canvas.Handle,
        0, 0,
        SRCCOPY
        );

    finally
      bmp.Free;
    end;
  a := a + 1; //a ist eine Konstante....^^
  if a = b then
    a := 0; //Da nochmal...
end;
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#4

Re: laufende sinus-Kurve

  Alt 22. Mai 2004, 12:35
dann nimm doch variablen, die du vorher eben mit deinem konstanten-wert initialisierst.
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz