Sunday 15 March 2015

Java: Rotate image towards mouse position? -



Java: Rotate image towards mouse position? -

so i'm having guy:

let's phone call him bob.

i want create him rotate towards mouse position. have figured out drawing line between bob , mouse , finding angle of line, can find out angle is, bob needs face in order 'point' towards mouse. still don't know how accomplish task.

thanks in advance!

you should not include image in jlabel. not offer much flexibility. positioning may odd, , can't draw image rotated. (you create rotated image , set label, inefficient, , sizing , position issues drive mad).

instead, should paint image manually, in overridden paintcomponent method of jpanel. there still details consider. example, image should have position, , position should refer center of image - namely, point rotated about.

however, when have computed angle of line between image center , mouse position, can paint image desired orientation, by

moving image center @ origin rotating image moving image center @ desired position

here mcve:

import java.awt.graphics; import java.awt.graphics2d; import java.awt.point; import java.awt.renderinghints; import java.awt.event.mouseevent; import java.awt.event.mousemotionlistener; import java.awt.geom.affinetransform; import java.awt.image.bufferedimage; import java.io.file; import java.io.ioexception; import javax.imageio.imageio; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.swingutilities; public class imagefollowingmousetest { public static void main(string[] args) { swingutilities.invokelater(new runnable() { @override public void run() { createandshowgui(); } }); } private static void createandshowgui() { jframe f = new jframe(); f.setdefaultcloseoperation(jframe.exit_on_close); f.getcontentpane().add(new imagefollowingmousepanel()); f.setsize(400,400); f.setlocationrelativeto(null); f.setvisible(true); } } class imagefollowingmousepanel extends jpanel implements mousemotionlistener { private final bufferedimage image; private point imageposition = new point(150,150); private double imageanglerad = 0; public imagefollowingmousepanel() { bufferedimage = null; seek { = imageio.read(new file("6wu0b.png")); } grab (ioexception e) { e.printstacktrace(); } image = i; addmousemotionlistener(this); } protected void paintcomponent(graphics gr) { super.paintcomponent(gr); graphics2d g = (graphics2d)gr; g.setrenderinghint( renderinghints.key_rendering, renderinghints.value_render_quality); int cx = image.getwidth() / 2; int cy = image.getheight() / 2; affinetransform oldat = g.gettransform(); g.translate(cx+imageposition.x, cy+imageposition.y); g.rotate(imageanglerad); g.translate(-cx, -cy); g.drawimage(image, 0, 0, null); g.settransform(oldat); } @override public void mousedragged(mouseevent e) { } @override public void mousemoved(mouseevent e) { double dx = e.getx() - imageposition.getx(); double dy = e.gety() - imageposition.gety(); imageanglerad = math.atan2(dy, dx); repaint(); } }

java image

No comments:

Post a Comment