Während dies eine Art Follow-up zu der vorherigen Antwort ist, fügt es ein wenig (hoffentlich) hinzu.
Hauptsächlich möchte ich klarstellen, dass wir normalerweise Dinge wie draw a rectangle at 10, 3
zeichnen. Wenn wir also so darüber nachdenken: move origin to 10, 3
, dann draw rectangle at 0, 0
. Dann müssen wir nur noch eine Drehung dazwischen hinzufügen.
Ein weiterer wichtiger Punkt ist die Ausrichtung des Textes. Am einfachsten ist es, den Text auf 0, 0 zu zeichnen, sodass wir die richtige Ausrichtung verwenden können, ohne die Textbreite zu messen.
Wir sollten den Text immer noch um einen Betrag verschieben, um ihn vertikal zu zentrieren, und leider hat Canvas keine große Zeilenhöhenunterstützung, also ist das eine Vermutungs - und Kontrollsache (korrigiert mich, wenn es etwas Besseres gibt).
Ich habe 3 Beispiele erstellt, die einen Punkt und einen Text mit 3 Ausrichtungen bieten, um anzuzeigen, wo der tatsächliche Punkt auf dem Bildschirm ist, wo die Schrift gehen wird.
var font, lineHeight, x, y;
x = 100;
y = 100;
font = 20;
lineHeight = 15; // this is guess and check as far as I know
this.context.font = font + 'px Arial';
// Right Aligned
this.context.save();
this.context.translate(x, y);
this.context.rotate(-Math.PI/4);
this.context.textAlign = 'right';
this.context.fillText('right', 0, lineHeight/2);
this.context.restore();
this.context.fillStyle = 'red';
this.context.fillRect(x, y, 2, 2);
// Center
this.context.fillStyle = 'black';
x = 150;
y = 100;
this.context.save();
this.context.translate(x, y);
this.context.rotate(-Math.PI/4);
this.context.textAlign = 'center';
this.context.fillText('center', 0, lineHeight/2);
this.context.restore();
this.context.fillStyle = 'red';
this.context.fillRect(x, y, 2, 2);
// Left
this.context.fillStyle = 'black';
x = 200;
y = 100;
this.context.save();
this.context.translate(x, y);
this.context.rotate(-Math.PI/4);
this.context.textAlign = 'left';
this.context.fillText('left', 0, lineHeight/2);
this.context.restore();
this.context.fillStyle = 'red';
this.context.fillRect(x, y, 2, 2);
Die Linie this.context.fillText('right', 0, lineHeight/2);
ist im Grunde 0, 0
, außer dass wir etwas für den Text bewegen nahe dem Punkt zentriert werden
Haben Sie grübelten die Suche in vorhandenen Grafiklösungen anstatt zu versuchen, Ihre eigenen zu bauen ? flot (http://code.google.com/p/flot/) ist ein Beispiel, das Canvas verwendet. – Bartek