Java: Rotate image towards mouse position? -
तो मुझे यह आदमी हो रहा है:
चलो उसे बॉब कहते हैं।
मैं उसे अपने माउस की स्थिति की ओर घुमाएगा। मैंने पहले ही सोचा है कि बॉब और माउस के बीच एक रेखा खींचकर और इस रेखा के कोण को ढूंढकर, मैं यह पता कर सकता हूँ कि कोण क्या है, ताकि माउस की तरफ 'बिंदु' करने के लिए बॉब को सामना करना पड़े। हालांकि मुझे अभी भी यह काम पूरा करने के बारे में नहीं पता है।
धन्यवाद अग्रिम!
आपको छवि को JLabel
में शामिल नहीं करना चाहिए। यह बस बहुत लचीलेपन की पेशकश नहीं करता है स्थिति अजीब हो सकती है, और आप चित्र को घुमाएंगे नहीं खींच सकते। (आप केवल घुमाए गए छवि बना सकते हैं और इसे लेबल में डाल सकते हैं, लेकिन यह अक्षम होगा, और आकार और स्थिति के मुद्दों से आपको पागल हो जाएगा।)
इसके बजाय, आपको अपनी छवि मैन्युअल रूप से पेंट करनी चाहिए Overridden paintComponent
विधि का JPanel
। अभी भी विचार करने के लिए कुछ विवरण हैं उदाहरण के लिए, छवि की निश्चित रूप से एक निश्चित स्थिति होनी चाहिए, और स्थिति को छवि का केंद्र संदर्भित करना चाहिए - अर्थात्, इंगित करें कि इसके बारे में घुमाया जाएगा।
हालांकि, जब आपने छवि केंद्र और माउस की स्थिति के बीच की रेखा के कोण की गणना की है, तो आप केवल इच्छित वरीयता के साथ छवि को पेंट कर सकते हैं
यहां एक है:
आयात करें java.awt.Graphics; आयात करें java.awt.Graphics2D; Import java.awt.Point; आयात करें java.awt.RenderingHints; आयात करें java.awt.event.MouseEvent; आयात करें java.awt.event.MouseMotionListener; आयात करें java.awt.geom.AffineTransform; आयात करें java.awt.image.BufferedImage; आयात करें java.io.File; आयात java.io.IOException; आयात javax.imageio.ImageIO; आयात javax.swing.JFrame; आयात javax.swing.JPanel; आयात javax.swing.SwingUtilities; सार्वजनिक श्रेणी ImageFollowingMouseTest {सार्वजनिक स्थिर शून्य मुख्य (स्ट्रिंग [] एजीआर) {SwingUtilities.invokeLater (नया रननाबल) {@Override सार्वजनिक शून्य चला () {createAndShowGUI ();}}); } प्राइवेट स्टैटिक व्हॉइड createAndShowGUI () {JFrame f = new JFrame (); f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); F.getContentPane ()। जोड़ें (नया ImageFollowingMousePanel ()); f.setSize (400,400); f.setLocationRelativeTo (शून्य); f.setVisible (सही); }} वर्ग ImageFollowingMousePanel विस्तार करता है JPanel लागू करता है MouseMotionListener {निजी अंतिम BufferedImage छवि; निजी बिंदु imagePosition = नया बिंदु (150,150); निजी डबल छविएन्गेलर्रेड = 0; सार्वजनिक ImageFollowingMousePanel () {BufferedImage i = null; कोशिश {i = imageIO.read (नई फ़ाइल ("6Wu0b.png")); } पकड़ (IOException ई) {e.printStackTrace (); } छवि = i; addMouseMotionListener (this); } संरक्षित शून्य पेंटकंपनेन्ट (ग्राफ़िक्स जीआर) {सुपरपिंटकंपोनेंट (जीआर); ग्राफिक्स 2 डी जी = (ग्राफिक्स 2 डी) जीआर; G.setRenderingHint (रेंडरिंग हिंट्स। 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 (छवि, 0, 0, रिक्त); g.setTransform (oldAT); } @ ओवरराइड पब्लिक व्हाइड माउसड्रागग्ड (माउसईवेंट ई) {} @ ओवरराइड पब्लिक वाइड माउन्मोड (माउसईवेंट ई) {डबल डीएक्स = ई.ए.टी.एक्स () - इमेज पोजीशन.एटीएक्स (); डबल डाई = ई.जी.टी.इ. () - imagePosition.getY (); ImageAngleRad = Math.atan2 (डीए, डीएक्स); फिर से रंगना (); }}
Comments
Post a Comment