Domanda

Consente di dire che abbiamo un 400x800 tela e voglio disegnare una linea che collega i punti P1 (10,10) e P2 (500000,800000). Come si può vedere il secondo punto è di gran lunga al di fuori dei confini di tela. Se uso canvas.darwLine (P1.x, p1.y, p2.x, p2.y, vernice) si blocca app e l'applicazione diventa inutilizzabile. utilizzando un ritaglio non risolve il problema, il motore di disegno sta ancora cercando di disegnare i pixel per tutta la strada al secondo punto

Tutti i suggerimenti o una soluzione?

È stato utile?

Soluzione

Se P2 è al di fuori dell'area visibile (480x800 in questo caso particolare) quindi calcolare l'intersezione di questa linea con il bordo, un quindi utilizzare il punto P2 invece di intersezione.

Altri suggerimenti

È possibile ridimensionare la vostra linea, con qualcosa di simile:

int maxX = 400;
int maxY = 800;

//Calculate how much we have to scale down to fit in the bounds:
float scaleX = (maxX - p1.x)/p2.x;
float scaleY = (maxY - p1.y)/p2.y;

//Get the smallest scale, so that we fit in both axises.
float scale = Math.min(scaleX, scaleY);

//Only scale if we are scaling down. There is no need to make lines smaller than the screen scale up to the screen bounds:
if(scale < 1.0f){
    p2.x *= scale;
    p2.y *= scale;
}

Non ho provato questo, quindi non posso garantire che funzionerà.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top