2012-12-28 6 views
6

C'è un modo per evitare di ridisegnare tutti gli elementi sulla tela (quindi non devo tenere traccia di tutto), pur avendo ancora un Esperienza di disegno scorrevole con la linea attualmente disegnata?Disegna una linea con lo strumento Penna su tela con Smashly senza dover ridisegnare tutte le altre righe

+0

Sono cercando di usare canvas per un'applicazione di disegno. Hai già le posizioni del mouse, ma il risultato è (come puoi immaginare) abbastanza spigoloso. Sto cercando di appianare la linea finale, senza bisogno di ridisegnarlo ogni fotogramma dall'inizio. Forse un modo per calcolare la versione più liscia di ciò che viene aggiunto ogni fotogramma ... – Mia

+1

@ x3ro se si verificano il problema in prima persona saprete che questa era in realtà una domanda molto buona che si nasconde dietro una formulazione piuttosto scadente. Fare uno sforzo prima di votare per chiudere una domanda è solitamente molto apprezzato. Ho cercato di migliorare la formulazione, se ti interessa aiutare ... – iwein

+0

@iwein: Penso che chiunque pubblichi una domanda su SO dovrebbe fare lo sforzo di scrivere una domanda decente. In quanto sopra che include, ad esempio, il link a ciò che ha letto, e un piccolo esempio di codice di ciò che ha già scritto. Inoltre, il primo paragrafo fa una dichiarazione, il secondo paragrafo pone una domanda, ma non riesco davvero a vedere la connessione diretta tra di loro (vero, si potrebbe essere in grado di interpolare, ma comunque). Perché una domanda povera dovrebbe rimanere aperta nella remota possibilità che qualcuno arrivi con chi lo capisce? Perché non costringere l'OP a riformularlo? – fresskoma

risposta

5

Questo è una domanda molto buona, ma formulata in modo vago. Si prega di essere più attenti domande di parole in futuro.

In genere durante il disegno di linee smussate è necessario ridisegnare la riga dall'inizio.

Non è necessario ridisegnare tutto fin dall'inizio, però, perché si dovrebbe essere seguito di queste operazioni:

  1. Salva la tela corrente a una tela in memoria
  2. iniziare a disegnare una nuova linea
  3. Come si sta disegnando, si è costantemente:
    • Cancellazione della tela
    • disegno da canvas n-memoria sulla tela principale
    • Disegno la linea-so-far
  4. Quando la linea termina, si salvano le nuove tela alla tela in memoria e ripetere questo processo

Il solo la linea che devi tenere traccia di (in termini di punti) è quella "corrente". Tutte le vecchie linee vengono salvate nella bitmap tramite la tela in memoria.

Ecco un esempio che ho fatto molto tempo fa, trattando in particolare le linee morbide. L'organizzazione del codice è strano perché ho iniziato con qualcuno codice elses, ma dovrebbe dare l'idea di base:

http://jsfiddle.net/NWBV4/10/

La parte disegno sopra descritta è visto nella MouseMove:

this.mousemove = function(ev) { 
    if (tool.started) { 
     context.clearRect(0, 0, 300, 300); 
     // put back the saved content 
     context.drawImage(memCanvas, 0, 0); 
     tool.points.push({ 
      x: ev._x, 
      y: ev._y 
     }); 
     drawPoints(context, tool.points); 
    } 
}; 
+0

Grazie per la risposta ... Ho capito il problema, e questo è ESATTAMENTE il motivo per cui stavo facendo la domanda (ri-disegnare il problema) .. Una piccola domanda sul tuo violino e spiegazione: "Disegno da in memoria tela sulla tela principale " -perché è necessario continuare a ridisegnare la tela temporanea su quella esistente? – Mia

+0

Perché dobbiamo cancellare la tela ogni volta. Quindi la tela temp rappresenta tutte le linee già disegnate, che dobbiamo mettere "indietro" sulla tela prima di disegnare la nostra ultima riga –

+0

Non potrei essere più d'accordo con la risposta, ma mi piacerebbe dire che potresti usare un'immagine disegnare anche sulla tela. Si perde il "controllo" che si ha dal disegnare la forma da soli, ma mi sembra più efficiente (non c'è alcun ritardo mentre si fa clic sulla tela per disegnare), a seconda di cosa si tratta veramente della tua applicazione. Ecco un link alla mia domanda - non proprio - simile (guarda la parte EDIT nella mia domanda): http://stackoverflow.com/questions/10122553/create-a-realistic-pencil-tool-for-a- painting-app-with-html5-canvas Puoi sostituire l'immagine per ottenere il risultato che desideri veramente – jazzytomato

Problemi correlati