Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [DELPHI] Disegnare una spirale su un TImage

    Ho utilizzato il seguente codice per creare una spirale:

    codice:
    var a,x,y:integer; rad,r:real;
    begin
    r:=0; a:=0;
    while(true) do
    begin  // a : 180 = rad : pi   ->   rad = a * pi / 180
    rad := a * pi / 180;
    x:=round(250+r*cos(rad));
    y:=round(250+r*sin(rad));
    I.Canvas.Pixels[x,y]:=ColorBox1.Selected;
    r:=r+StrToFloat(edit1.Text);
    a:=a+1;
    if a>=360 then a:=a-360;
    
    i.Refresh;
    i.Repaint;
    if ((x<0)or(x>500))and((y<0)or(y>500)) then exit;
    end;
    end;
    dove:
    r è il raggio che aumenta sempre di un delta che leggo da Edit1
    a è l'angolo
    I è il TImage

    il disegno finisce quando esco dai margini del TImage (width:500,height:500)


    Il problema è che inserendo delta piccoli (es 0,01) il disegno viene effettuato mooolto lentamente, ci mette più di 10 secodi x disegnarlo tutto. vorrei velocizzarlo (mantenendo ovviamente l'animazione, cioè il disegno visto punto x punto durante la creazione), come posso fare?

    Grazie

  2. #2
    up

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463

    Bitmap e ScanLine, oppure libreria alternativa

    L'accesso ai singoli pixel usando la proprietà Pixels è alquanto lento.

    Meglio disegnare su un TBitmap sfruttando però la proprietà ScanLine da visualizzare poi sul controllo TImage con una semplice assegnazione alla proprietà Picture.

    In alternativa, per mantenere un approccio simile a quello che hai già utilizzato, puoi prevedere l'uso di una libreria alternativa, come l'eccelsa Graphics32 (che mi ha già dato molte soddisfazioni in più e più software), che dispone di controlli e funzioni di disegno estremamente rapide. Peraltro, uno dei demo, se non ricordo male, crea proprio delle spirali.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.