13. december 2009 - 18:05
Der er
35 kommentarer og 1 løsning
Langsom billede rotation om punkt X
Jeg søger en applet som fungerer som følgende eller så tæt på som muligt: En side hvor der er en række billeder. Med et klik på et billede loades billedet i appletten. Med et klik på billedet i appletten, kan billedet roterer rundt om X. X er punktet på billedet hvor man klikkede. Der roteres langsom ved at der klikkes på en knap eller pil til højre/ventre. Nogen der kender sådan et script eller som kan lave et?
Annonceindlæg tema
Forsvar & beredskab
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
14. december 2009 - 04:47
#1
Jeg kender ikke noget færdigt kode til det, men det kan da laves. Kan du selv lidt Java ?
14. december 2009 - 07:06
#2
Jeg kan desværre ikke selv kode java
17. december 2009 - 19:47
#3
søøøde arne... :-)
17. december 2009 - 19:47
#4
Glædelig jul :)
17. december 2009 - 20:22
#5
Jeg overvejer staadig om jeg orker at gaa igang med det i weekenden.
20. december 2009 - 22:13
#6
Lidt kode.
20. december 2009 - 22:13
#7
<img src="redsquare.gif" onClick="document.ImageFun.setImage('redsquare.gif')"> <img src="greensquare.gif" onClick="document.ImageFun.setImage('greensquare.gif')"> <img src="bluesquare.gif" onClick="document.ImageFun.setImage('bluesquare.gif')"> <hr> <applet name="ImageFun" codebase="." code="ImageFunApplet.class" width="400" height="400"> </applet>
20. december 2009 - 22:13
#8
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import javax.swing.ImageIcon; import javax.swing.JApplet; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; public class ImageFunApplet extends JApplet { private double v; private int dx; private int dy; private String imgnam; private JLabel imgicn; public void init() { v = 0; dx = 0; dy = 0; imgnam = null; imgicn = null; getContentPane().setLayout(new BorderLayout()); JPanel rot = new JPanel(); rot.setLayout(new GridLayout(1, 4)); JButton clockfast = new JButton("Rotate ++"); clockfast.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { v += 5; update(); } }); rot.add(clockfast); JButton clock = new JButton("Rotate +"); clock.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { v += 1; update(); } }); rot.add(clock); JButton cclock = new JButton("Rotate -"); cclock.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { v -= 1; update(); } }); rot.add(cclock); JButton cclockfast = new JButton("Rotate --"); cclockfast.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { v -= 5; update(); } }); rot.add(cclockfast); getContentPane().add(rot, BorderLayout.SOUTH); update(); } public void setImage(String imgnam) { this.imgnam = imgnam; update(); } private void update() { if(imgicn != null) { getContentPane().remove(imgicn); } if(imgnam == null) { imgicn = new JLabel(getBlankIcon()); } else { imgicn = new JLabel(getIcon()); } imgicn.addMouseListener(new MouseListener() { public void mouseClicked(MouseEvent ev) { dx = ev.getPoint().x - imgicn.getWidth() / 2; dy = ev.getPoint().y - imgicn.getHeight() / 2; } public void mouseEntered(MouseEvent ev) { } public void mouseExited(MouseEvent ev) { } public void mousePressed(MouseEvent ev) { } public void mouseReleased(MouseEvent ev) { } }); getContentPane().add(imgicn, BorderLayout.CENTER); invalidate(); validate(); getContentPane().repaint(); } private ImageIcon getIcon() { ImageIcon imgicn = new ImageIcon(getClass().getClassLoader().getResource(imgnam)); BufferedImage bi = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB); Graphics2D g2 = bi.createGraphics(); AffineTransform at = new AffineTransform(); at.translate((bi.getWidth()-imgicn.getIconWidth())/2, (bi.getHeight()-imgicn.getIconHeight())/2); at.rotate(Math.toRadians(v), imgicn.getIconWidth()/2 + dx, imgicn.getIconHeight()/2 + dy); g2.setColor(Color.WHITE); g2.fillRect(0, 0, bi.getWidth(), bi.getHeight()); g2.drawImage(imgicn.getImage(), at, this); g2.transform(at); g2.dispose(); return new ImageIcon(bi); } private ImageIcon getBlankIcon() { BufferedImage bi = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB); Graphics2D g2 = bi.createGraphics(); g2.setColor(Color.WHITE); g2.fillRect(0, 0, bi.getWidth(), bi.getHeight()); g2.dispose(); return new ImageIcon(bi); } }
21. december 2009 - 15:02
#9
Jeg er ved at hente og installere jdk kan du poste kommandoen for at compile? og gerne step-vis... :-)
21. december 2009 - 15:09
#10
C:\hvorjavaligger\bin\javac ImageFunApplet.java
21. december 2009 - 15:28
#11
C:\Program Files\Java\jdk1.6.0_17\bin>javac ImageFunApplet.java ImageFunApplet.java:1: illegal character: \187 ´╗┐import java.awt.BorderLayout; ^ ImageFunApplet.java:1: illegal character: \191 ´╗┐import java.awt.BorderLayout; ^ 2 errors C:\Program Files\Java\jdk1.6.0_17\bin>
21. december 2009 - 15:32
#12
Check lioge om der er kommet noget snask ind oeverst i filen.
21. december 2009 - 15:34
#13
det første tegn er et i, ingen mellemrum eller andet snask
21. december 2009 - 15:39
#14
Proev og gem filen som ANSI i.s.f. UTF-8.
21. december 2009 - 15:46
#15
ok :) SÅDAN yes, det er fanme smart. Kan du gøre sådan at man kan resette på en knap og gøre så den resetter når man loader et nyt billede ind i appleten? :))
21. december 2009 - 15:50
#16
aaahhh, kan du gøre sådan at rotationen centreres i appletten? :)) hehe jeg kunne ikke forstå hvorfor den ikke roterede om der hvor man klikkede, men fandt ud af at det gjorde den, men den ikke centrerede billedet til midten af appletten...
21. december 2009 - 15:52
#17
altså punktet X skal gerne centreres i midten af appletten
21. december 2009 - 15:55
#18
Ah. Klik skal ikke vare nyt omdrejnings punkt men klik punkt skal flyttes til centrum og saa roterer man igen om det.
21. december 2009 - 15:57
#19
Jeg kan foerst selv proeve senere. Men har du mod paa selv at eksperimentere saa lav: at.translate((bi.getWidth()-imgicn.getIconWidth())/2, (bi.getHeight()-imgicn.getIconHeight())/2); at.rotate(Math.toRadians(v), imgicn.getIconWidth()/2 + dx, imgicn.getIconHeight()/2 + dy); om til: at.translate((bi.getWidth()-imgicn.getIconWidth())/2 + dx, (bi.getHeight()-imgicn.getIconHeight())/2 + dy); at.rotate(Math.toRadians(v), imgicn.getIconWidth()/2, imgicn.getIconHeight()/2);
21. december 2009 - 16:06
#20
nemlig Men den ændring gjorde desværre ikke nogen forskel, den roterer stadig om klik
21. december 2009 - 16:16
#21
Fik du recompilet og genstartet browseren efter aendringen ?
21. december 2009 - 16:16
#22
Hvis ja, saa maa jeg nok teste lidt selv i aften (min tid).
21. december 2009 - 16:17
#23
PS: er du god til matematik ?
21. december 2009 - 16:21
#24
ja recompilet og genstartet browser. nej desværre er jeg ikke god til matematik :) har du en matenatik opgave du skal have lavet? hehe
21. december 2009 - 16:27
#26
Jeg proever at kigge paa at centrere roteringen senere (om en 6-7 timer).
21. december 2009 - 16:32
#27
super, og også gerne resetknap og reset ved load af nyt billede :) jeg tjekker igen imorgen
22. december 2009 - 00:06
#28
<img src="redsquare.gif" onClick="document.ImageFun.setImage('redsquare.gif')"> <img src="greensquare.gif" onClick="document.ImageFun.setImage('greensquare.gif')"> <img src="bluesquare.gif" onClick="document.ImageFun.setImage('bluesquare.gif')"> <hr> <applet name="ImageFun" codebase="." code="ImageFunApplet.class" width="500" height="500"> </applet>
22. december 2009 - 00:07
#29
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import javax.swing.ImageIcon; import javax.swing.JApplet; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; public class ImageFunApplet extends JApplet { private double v; private int x; private int y; private String imgnam; private JLabel imgicn; public void init() { v = 0; x = getWidth()/2; y = getHeight()/2; imgnam = null; imgicn = null; getContentPane().setLayout(new BorderLayout()); JPanel rot = new JPanel(); rot.setLayout(new GridLayout(1, 4)); JButton clockfast = new JButton("Rotate ++"); clockfast.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { v += 5; update(); } }); rot.add(clockfast); JButton clock = new JButton("Rotate +"); clock.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { v += 1; update(); } }); rot.add(clock); JButton cclock = new JButton("Rotate -"); cclock.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { v -= 1; update(); } }); rot.add(cclock); JButton cclockfast = new JButton("Rotate --"); cclockfast.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { v -= 5; update(); } }); rot.add(cclockfast); JButton reset = new JButton("Reset"); reset.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { v = 0; x = getWidth()/2; y = getHeight()/2; update(); } }); rot.add(reset); getContentPane().add(rot, BorderLayout.SOUTH); update(); } public void setImage(String imgnam) { this.imgnam = imgnam; v = 0; x = getWidth()/2; y = getHeight()/2; update(); } private void update() { if(imgicn != null) { getContentPane().remove(imgicn); } if(imgnam == null) { imgicn = new JLabel(getBlankIcon()); } else { imgicn = new JLabel(getIcon()); } imgicn.addMouseListener(new MouseListener() { public void mouseClicked(MouseEvent ev) { x = ev.getPoint().x; y = ev.getPoint().y; update(); } public void mouseEntered(MouseEvent ev) { } public void mouseExited(MouseEvent ev) { } public void mousePressed(MouseEvent ev) { } public void mouseReleased(MouseEvent ev) { } }); getContentPane().add(imgicn, BorderLayout.CENTER); invalidate(); validate(); getContentPane().repaint(); } private ImageIcon getIcon() { ImageIcon imgicn = new ImageIcon(getClass().getClassLoader().getResource(imgnam)); BufferedImage bi = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB); Graphics2D g2 = bi.createGraphics(); AffineTransform at = new AffineTransform(); g2.setColor(Color.WHITE); g2.fillRect(0, 0, bi.getWidth(), bi.getHeight()); at.translate(x - imgicn.getIconWidth()/2, y); at.rotate(Math.toRadians(v), bi.getWidth()/2 - x + imgicn.getIconWidth()/2, bi.getHeight()/2 - y + imgicn.getIconHeight()/2); g2.drawImage(imgicn.getImage(), at, this); g2.transform(at); g2.dispose(); return new ImageIcon(bi); } private ImageIcon getBlankIcon() { BufferedImage bi = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB); Graphics2D g2 = bi.createGraphics(); g2.setColor(Color.WHITE); g2.fillRect(0, 0, bi.getWidth(), bi.getHeight()); g2.dispose(); return new ImageIcon(bi); } }
22. december 2009 - 16:50
#30
Nu har jeg fået testen den Opfører den sig ikke lidt mærkeligt? Når billedet loades, så bliver billedet ikke centreret i appletten. Og når jeg klikker på billedet bliver X heller ikke midtpunktet. Gør den ved dig?
22. december 2009 - 19:59
#31
Da jeg testede virkede det som at billedet kom ind i centrum. Jeg legede lidt med det og syntes at det var alt for forvirrende at goere klik sted til centrum saa i.s.f. valgte jeg at flytte centrum af billedet til klik sted.
22. december 2009 - 20:05
#32
Centrum af billedet bliver ikke flyttet til klik sted. Men det skal være kliksted som skal være centrum af appleten, samt omdrejningspunkt X. Forestil dig et rundt objekt på billedet som skal dreje rundt for ikke at se det på hovedet. Eksempelvis en porcelænsmalet dyb tallerken.
22. december 2009 - 20:06
#33
man skal så klikke i midten af tallerknen for at få tallerkens midte centreret i appletten og så kan den roteres.
06. januar 2010 - 17:29
#34
arne du må ligge et svar så får du point :) jeg opretter et nyt spm så der er andre der kan give et bud på at få det sidste på plads.
08. januar 2010 - 04:20
#35
OK
08. januar 2010 - 07:14
#36
mange tak for din tid. Jeg håber nogen kan justere det sidste. Hvis du får tid på et tidspunkt igen, så hop på :)
Kurser inden for grundlæggende programmering