使图像指向Java中的特定位置

在您将其标记为重复之前


我已经在互联网上进行了大量搜索,并尝试了每种解决方案,但是没有人以与我相同的方式来做。在我的情况下,轮换是一门精打细算的课程。


我创建了一个继承JLabel类的Java类,在我的类中有一个BufferedImage使用该paintComponent(Graphics g)方法绘制的箭头。


我试图使箭头指向特定的点(我是从另一种方法获得的),但是出了点问题,箭头旋转了错误的方向。


我认为:由于imageLocation是相对于标签的,因此计算不正确。


这是我的代码:


package pkg1;


import java.awt.*;

import java.awt.event.*;

import java.awt.image.*;

import java.io.*;

import javax.imageio.*;

import javax.swing.*;


public final class ImageLabel extends JLabel {


   private float angle = 0.0f; // in radians

   private Point imageLocation = new Point();

   private File imageFile = null;

   private Dimension imageSize = new Dimension(50, 50);

   private BufferedImage bi;


   private BufferedImage resizeImage(BufferedImage originalImage, int img_width, int img_height) {

      int type = originalImage.getType() == 0 ? BufferedImage.TYPE_INT_ARGB : originalImage.getType();

      BufferedImage resizedImage = new BufferedImage(img_width, img_height, type);

      Graphics2D g = resizedImage.createGraphics();

      g.drawImage(originalImage, 0, 0, img_width, img_height, null);

      g.dispose();


      return resizedImage;

   }


   @Override

   public void paintComponent(Graphics g) {

      super.paintComponent(g);

      if (bi == null) {

         return;

      }

      imageLocation = new Point(getWidth() / 2 - bi.getWidth() / 2, getHeight() / 2 - bi.getHeight() / 2);

      Graphics2D g2 = (Graphics2D) g;

      g2.rotate(angle, imageLocation.x + bi.getWidth() / 2, imageLocation.y + bi.getHeight() / 2);

      g2.drawImage(bi, imageLocation.x, imageLocation.y, null);

   }


   public void rotateImage(float angle) { // rotate the image to specific angle

      this.angle = (float) Math.toRadians(angle);

      repaint();

   }


   public void pointImageToPoint(Point target) {

      calculateAngle(target);

      repaint();

   }




慕斯709654
浏览 113回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java