2017-07-07 4 views
2

Ich versuche, Schrägstrich auf ein Bild in Postscript anzuwenden. Ich habe erfolgreich mit getan:Zentriert Schere/Skew in PostScript

[1 -0.5 -0.5 1 0 0] concat 

Wo beide -0.5 auf einem Schräg von 22,5 Grad auf der vertikalen und horizontalen Achse bezeichnet. Das Problem ist, dass der Versatz nicht zentriert ist, der Mittelpunkt des Bildes wird bewegt, so dass mein Bild nicht auf der gleichen Position bleibt, nachdem der Versatz angewendet wurde.

Wie kann ich Schrägstellung anwenden, während ich die Position beibehalte? Ich habe versucht, das Bild vor/nach dem Schrägbild zu übersetzen, aber ich kann nicht finden, wie viel ich das Bild übersetzen sollte, damit es immer in der gleichen Position bleibt.

Antwort

1

Ok, ich finde endlich den Weg, es zu tun. Zu allererst positioniert das Element wie üblich mit übersetzen:

1135 568 translate 

Dann skew die nur an einer Achse X oder Y, nicht beide gleichzeitig. Die Zahl in der Matrix ist tan(skew_angle) so beispielsweise für einen 20-Grad-Winkel auf der X-Achse:

[1 0 0.3639 1 0 0] concat 

Danach, übersetzen, das Bild, weil nun die Breite des Begrenzungskastens des Bildes größer ist, können wir berechnen Sie diese zusätzliche Breite als additional_width = abs(object_height * tan(skew_angle)).So, jetzt übersetzen wir diese halbe Breite:

{additional_width/2} 0 translate 

Jetzt machen wir den Versatz auf Y auf die gleiche Weise:

[1 0.3639 0 1 0 0] concat 

Und berechnen die zusätzliche Höhe als additional_height = abs(object_width * tan(skew_angle))

0 {additional_height/2} translate 

Auf diese Auf diese Weise bleibt das Objektzentrum nach der Schrägstellung in der gleichen Position.

1

Skewing funktioniert durch Ändern der aktuellen Transformationsmatrix, es ist überhaupt nicht zentriert.

Die Bilder werden von der linken unteren Ecke beschrieben, es sei denn, Sie ändern das CTM weiter, was beim Drucken in PostScript aus Umgebungen, in denen Bilder von oben nach unten gezeichnet werden, üblich ist.

Um Ihr Problem zu lösen, müssen Sie die im PLRM beschriebene Matrixmanipulation und Mathematik verstehen.

Vorausgesetzt, Sie wenden die Concat an dem Punkt unmittelbar vor dem Zeichnen des Bildes an, und keine anderen CTM-Manipulationen stattgefunden haben, dann ist die untere linke Ecke Ihres Bildes auf 0,0. Die Concat wird dies nicht beeinflussen (außer Sie haben ein Tx und Ty Mitglied in der Matrix), aber es wird ändern, wo das Bild gezeichnet wird. Was Sie tun müssen, ist die Koordinate des Mittelpunkts Ihres Bildes zu berechnen, wenn es normal gezeichnet wird, berechnen Sie, wo diese Koordinate nach der Anwendung der modifizierten CTM enden wird, und passen Sie dann die Schermatrix durch Hinzufügen von Tx und Ty an Werte so, dass die Koordinate des Zentrums in der erforderlichen Position ist. Oder übersetzen Sie den Ursprung entsprechend.

Der Schlüsselpunkt (wahrscheinlich) ist, dass Bilder ihre eigene Matrix haben, die oben auf dem CTM angewendet wird; Um die Benutzerraumkoordinate der Bildmitte zu berechnen, müssen Sie die Bildmatrix selbst auf die CTM anwenden. Und Sie müssen es erneut mit Ihrer Schermatrix durchführen, um die Position des Mittelpunkts des transformierten Bildes zu berechnen. Sobald Sie die Koordinaten des Mittelpunkts des Vanillebildes und des Mittelpunkts des gescherten Bildes haben, wissen Sie, wie Sie den aktuellen Punkt so übersetzen, dass die Mittelpunktkoordinate unverändert bleibt.

Sie haben kein Beispiel angegeben, so dass ich es nicht für Sie durcharbeiten kann und ich habe keine einfache Arbeit zur Hand. Ich werde versuchen, eine zu finden, wenn ich Zeit bekomme, und ich werde es hier veröffentlichen, wenn ich es tue.

Verwandte Themen