1
我想要在蠟染中縮放和翻譯SVG圖像。 爲此我使用在Batik中應用多個AffineTransformations
AffineTransform at= new AffineTransform();
at.scale(sx, sy);
at.translate(tx, ty);
canvas.setRenderingTransform(at, true);
後,我發現工作得很好(變焦,該sx
,sy
,tx
和ty
值必須屏幕座標,不SVG座標。
但我想允許多個縮放操作 的問題是:我不設法另一個轉型「添加」到現有
我嘗試先恢復舊的轉換,然後再應用新的轉換。但是,這讓我感到另一個問題:逆轉不起作用!它會導致圖像比原始圖像小(因此縮小)。
我嘗試了一下,並試圖應用轉換,然後應用逆,然後再應用原:
final AffineTransform at= new AffineTransform();
at.scale(zoom.sx, zoom.sy);
at.translate(zoom.tx, zoom.ty);
canvas.setRenderingTransform(at, true);
...
final AffineTransform reverseAt = at.createInverse();
canvas.setRenderingTransform(reverseAt, true);
...
final AffineTransform reverseBackAt= reverseAt.createInverse();
canvas.setRenderingTransform(reverseBackAt, true);
第一個轉變是正確的。第二個導致垃圾,但再次應用原始的(或逆的倒數),導致正確的結果。
因此,實際上,有兩個問題:
- 什麼是最好的方式,將多個縮放操作?
- 爲什麼逆變換的結果不符合我的預期?