当前位置: 首页 > 知识库问答 >
问题:

Java Swing旋转和缩放

武嘉祥
2023-03-14

我有一个被JScrollPane包围的JPanel。该JPanel用于显示图像。我需要提供zoomIn、zoomOut、顺时针旋转和逆时针旋转等功能。所有这些功能单独运行良好。对于缩放,我称之为图形对象的缩放。它发生在从左上到右下的基础上。对于旋转,我重置比例,然后平移、旋转

因此,问题是当面板坐标更改时,图像的坐标不会改变。有人可以帮助我更改图像的坐标吗?

public void paint(Graphics g)
{     
    Graphics2D g2d = (Graphics2D)g;
    g2d.translate((tempWidth/2), (tempHeight/2));
    g2d.rotate(m_rotate);
    g2d.translate(-(tempWidth/2), -(tempHeight/2));
    g2d.scale(m_zoom, m_zoom); 
    if(this.image != null && this.image.getHeight(null) > 0)
    {
        g2d.drawImage(this.image, 0, 0,302,312,this);         
    } 
    else
    {
        g2d.drawString("View Image Here!. ", 20, 20);
    }    
} 

共有1个答案

白镜
2023-03-14

谢谢你的帮助。它让我从一个新的角度思考,帮助我解决了这个问题。我所做的只是在旋转前缩放图像,现在运行良好。

public void paint(Graphics g) 
{          
    Graphics2D g2d = (Graphics2D)g; 
    g2d.scale(m_zoom, m_zoom);//This is what made the magic    
    g2d.translate((tempWidth/2), (tempHeight/2));     
    g2d.rotate(m_rotate);     
    g2d.translate(-(tempWidth/2), -(tempHeight/2)); 
    /*g2d.scale(m_zoom, m_zoom); removed this and placed above */
    if(this.image != null && this.image.getHeight(null) > 0)     
    {         
        g2d.drawImage(this.image, 0, 0,302,312,this);
    }
    else
    {         
        g2d.drawString("View Image Here!. ", 20, 20);
    }     
}
 类似资料:
  • 选择要变换的文字 您可以像对其他对象一样,对文字进行旋转、镜像、比例缩放和倾斜。但是,您选择文字的方式会影响变换结果: 要变换文字及其边框路径,请选择文字对象,然后使用旋转工具旋转对象和文本。 要只变换边框路径(而不变换它所包含的文字),请使用选择工具选择文字对象并进行拖移。 旋转文字路径(左图)与旋转文字和路径(右图)的对比图 另请参阅 第 197 页的 “变换对象 ” 调整文字缩放比例 您可以

  • 我有不同维度的文档图像,我希望能够有效地缩放和旋转他们在以下方式(标准的“旋转”和“缩放”逻辑)。我怎么做? 一幅图像是H像素高,W像素宽。最初,它应该缩放到600像素宽。在每次旋转时,面板的宽度和高度应该互换,缩放图像应该旋转90度。在每次缩放时,图像应按因子“比例”缩放。 以下是我到目前为止在...得到的BufferedImage会缩放和旋转,但不会平移(旋转90度后位于面板顶部的中心):

  • 问题内容: 我使用Java中的Graphics2D缩放和旋转绘制的图片。现在,我想知道当单击图片中的某个点时的原始坐标是什么。因此,鉴于旋转坐标和缩放坐标,我想计算原始坐标。有没有简单的方法可以做到这一点? 问题答案: 如果保留在绘制图像时使用的副本,则可以使用 AffineTransform.inverseTransform(Point2D ptSrc,Point2D ptDst) 将设备空间坐

  • 选择要变换的文字 您可以像对其他对象一样,对文字进行旋转、镜像、比例缩放和倾斜。但是,您选择文字的方式会影响变换结果: 要变换文字及其边框路径,请选择文字对象,然后使用旋转工具旋转对象和文本。 要只变换边框路径(而不变换它所包含的文字),请使用选择工具选择文字对象并进行拖移。旋转文字路径(左图)与旋转文字和路径(右图)的对比图 调整文字缩放比例 您可以相对字符的原始宽度和高度,指定文字高度和宽度的

  • 我有下面的代码,它做(第一部分)什么我想画一个棋盘上有一些棋子。 也就是说,它得到一个棋子的图像和图像的高度,它将图像的绘制转换为棋子所在的正方形,并将图像缩放到正方形的大小。 假设我想把黑色的部分旋转180度。我希望在某个地方有这样的东西: 如果我进入SmallChessboardComponent并从第一个rotation transform语句中删除注释delims,我将rook颠倒在原来的

  • 问题内容: 通过梳理后SVG规范和指南,如这个和这个,我仍然在努力理解究竟是如何链接转换工作。 精选相关报价 当将transform属性应用于SVG元素时,该元素将获得使用中的当前用户坐标系的“副本”。 和: 当转换链接在一起时,最重要的是要意识到,就像HTML元素转换一样,每个转换都将在坐标系被先前的转换转换后应用于坐标系。 和: 例如,如果要对元素应用旋转,然后进行平移,则平移将根据新的坐标系