how spin image around coin spin if spun 1 on table in java?
exactly this gif.
i have tried shearing using affinetransform
. it's not giving me output want though.
- http://puu.sh/48ihr.png sheared
- http://puu.sh/48ijx.png original
as can see 2 images, shearing kind of distorts image making larger rather rotating image.
caveat: you're not ever going same result displayed, can fake it
basically, example simple scales x-axis -1 1 , again...
import java.awt.borderlayout; import java.awt.dimension; import java.awt.eventqueue; import java.awt.graphics; import java.awt.graphics2d; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.event.mouseadapter; import java.awt.event.mouseevent; import java.awt.geom.affinetransform; import java.awt.image.bufferedimage; import java.io.file; import java.io.ioexception; import java.util.logging.level; import java.util.logging.logger; import javax.imageio.imageio; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.timer; import javax.swing.uimanager; import javax.swing.unsupportedlookandfeelexception; public class sheartest { public static void main(string[] args) { new sheartest(); } public sheartest() { eventqueue.invokelater(new runnable() { @override public void run() { try { uimanager.setlookandfeel(uimanager.getsystemlookandfeelclassname()); } catch (classnotfoundexception | instantiationexception | illegalaccessexception | unsupportedlookandfeelexception ex) { } jframe frame = new jframe("testing"); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setlayout(new borderlayout()); frame.add(new testpane()); frame.pack(); frame.setlocationrelativeto(null); frame.setvisible(true); } }); } public class testpane extends jpanel { private bufferedimage img; private float xscale = 1f; private float xdelta = 0.05f; public testpane() { try { img = imageio.read(new file("c:\\hold\\thumbnails\\megatokyo.jpg")); } catch (ioexception ex) { ex.printstacktrace(); } final timer timer = new timer(40, new actionlistener() { @override public void actionperformed(actionevent e) { xscale += xdelta; if (xscale > 1) { xdelta *= -1; } else if (xscale < -1) { xdelta *= -1; } repaint(); } }); timer.start(); } @override public dimension getpreferredsize() { return img == null ? new dimension(200, 200) : new dimension(img.getwidth(), img.getheight()); } @override protected void paintcomponent(graphics g) { super.paintcomponent(g); if (img != null) { graphics2d g2d = (graphics2d) g.create(); int x = (int)((getwidth() - (img.getwidth() * xscale)) / 2); int y = (getheight() - img.getheight()) / 2; affinetransform @ = new affinetransform(); at.translate(x, y); at.scale(xscale, 1); g2d.settransform(at); g2d.drawimage(img, 0, 0, this); g2d.dispose(); } } } }