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);
第一个转变是正确的。第二个导致垃圾,但再次应用原始的(或逆的倒数),导致正确的结果。
因此,实际上,有两个问题:
- 什么是最好的方式,将多个缩放操作?
- 为什么逆变换的结果不符合我的预期?