当前位置: 首页 > wzjs >正文

wordpress建图片网站乐都企业网站建设哪家快

wordpress建图片网站,乐都企业网站建设哪家快,手机端网站外部链接如何去优化,1688精品货源网站入口Graphics2D 类中的 rotate() 和 shear() 方法,它们能让你轻松实现图片的旋转和变形效果 一、旋转方法:rotate() 基本用法 rotate() 方法用于旋转图形或图像。它有两种主要形式: // 形式1:围绕原点(0,0)旋转 void rotate(dou…

Graphics2D 类中的 rotate() 和 shear() 方法,它们能让你轻松实现图片的旋转和变形效果
 

一、旋转方法:rotate()

基本用法

rotate() 方法用于旋转图形或图像。它有两种主要形式:

// 形式1:围绕原点(0,0)旋转
void rotate(double theta)// 形式2:围绕指定点(x,y)旋转
void rotate(double theta, double x, double y)
参数说明
  • theta:旋转角度(弧度值)。注意,Java 中角度通常用弧度表示,而非度数。
    • 要将度数转为弧度:Math.toRadians(角度)
    • 例如:90 度 = Math.toRadians(90) ≈ 1.57 弧度
  • x, y:旋转中心点的坐标。如果不指定,默认围绕原点 (0,0) 旋转。
  • // 围绕原点旋转45度
    g2.rotate(Math.toRadians(45));
    g2.drawImage(img, 0, 0, this);// 围绕图片中心旋转90度
    int centerX = img.getWidth(this) / 2;
    int centerY = img.getHeight(this) / 2;
    g2.rotate(Math.toRadians(90), centerX, centerY);
    g2.drawImage(img, 0, 0, this);

    二、变形(剪切)方法:shear()

    基本用法

    shear() 方法用于实现图形或图像的剪切变形,就像把图像 "斜着拉" 一样。

  • void shear(double shx, double shy)
    参数说明
  • shx:水平方向的剪切因子
    • 正值:向右倾斜(类似平行四边形向右倒)
    • 负值:向左倾斜(类似平行四边形向左倒)
  • shy:垂直方向的剪切因子
    • 正值:向下倾斜(类似平行四边形向下倒)
    • 负值:向上倾斜(类似平行四边形向上倒)
    • // 水平方向剪切(向右倾斜)
      g2.shear(0.5, 0);
      g2.drawImage(img, 0, 0, this);// 垂直方向剪切(向下倾斜)
      g2.shear(0, 0.3);
      g2.drawImage(img, 0, 0, this);// 同时水平和垂直剪切
      g2.shear(0.2, 0.2);
      g2.drawImage(img, 0, 0, this);

      三、使用技巧

      1. 角度与弧度的转换

      Java 中三角函数使用弧度,而我们习惯用度数:

    • 度数转弧度:Math.toRadians(度数)
    • 弧度转度数:Math.toDegrees(弧度)
    • 变换是累积的,多次调用会叠加效果:

      2. 多次变换的叠加效果
    • // 先旋转45度,再水平剪切
      g2.rotate(Math.toRadians(45));
      g2.shear(0.3, 0);
      g2.drawImage(img, 0, 0, this);
      3. 重置变换

      如果需要清除之前的变换,可以创建新的 Graphics2D 对象或使用 setTransform() 方法。

    • // 保存当前变换状态
      AffineTransform oldTransform = g2.getTransform();// 旋转并绘制第一张图片
      g2.rotate(Math.toRadians(45), centerX, centerY);
      g2.drawImage(img1, 50, 50, this);// 恢复变换状态("把玻璃转回原样")
      g2.setTransform(oldTransform);// 现在绘制第二张图片,它不会旋转
      g2.drawImage(img2, 200, 50, this);

    • import java.awt.Graphics;
      import java.awt.Graphics2D;
      import java.awt.Image;
      import javax.swing.*;public class TransformDemo extends JPanel {private Image image;public TransformDemo() {// 加载图片image = new ImageIcon("your-image-path.jpg").getImage();}@Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);Graphics2D g2 = (Graphics2D) g;// 1. 原始图片g2.drawImage(image, 50, 50, 100, 100, this);// 2. 旋转45度g2.rotate(Math.toRadians(45), 200, 100);g2.drawImage(image, 150, 50, 100, 100, this);g2.rotate(-Math.toRadians(45), 200, 100); // 恢复旋转// 3. 水平剪切g2.shear(0.3, 0);g2.drawImage(image, 300, 50, 100, 100, this);g2.shear(-0.3, 0); // 恢复剪切// 4. 垂直剪切g2.shear(0, 0.3);g2.drawImage(image, 50, 200, 100, 100, this);g2.shear(0, -0.3); // 恢复剪切// 5. 组合变换:先旋转再剪切g2.rotate(Math.toRadians(30), 200, 250);g2.shear(0.2, 0.2);g2.drawImage(image, 150, 200, 100, 100, this);g2.shear(-0.2, -0.2); // 先恢复剪切g2.rotate(-Math.toRadians(30), 200, 250); // 再恢复旋转}public static void main(String[] args) {JFrame frame = new JFrame("图形变换演示");frame.add(new TransformDemo());frame.setSize(500, 400);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);}
      }

      ****************************************************************************************************

    • 旋转和变形的操作实际上是应用在整个 "画布" 上的,而不是单独的图片。

    • 一、形象理解

      想象你在一块透明的玻璃上画画:

    • 画布 = 玻璃
    • 图片 = 玻璃上画的图案
    •  

      当你调用 g2.rotate() 或 g2.shear() 时,相当于:

    • 旋转画布:你把整个玻璃旋转了一个角度
    • 变形画布:你把玻璃扭曲成了平行四边形
    •  

      这时,玻璃上的所有图案(图片)都会跟着一起旋转或变形!

    • 二、为什么这很重要?

      1. 旋转中心点的影响
    • 如果围绕原点 (0,0) 旋转,图片会围绕窗口左上角旋转
    • 如果指定中心点,图片会围绕该点旋转
      // 围绕原点旋转(图片会"飞出"窗口)
      g2.rotate(Math.toRadians(45));
      g2.drawImage(img, 50, 50, this);// 围绕图片中心旋转(效果更直观)
      int centerX = 50 + img.getWidth(this)/2;
      int centerY = 50 + img.getHeight(this)/2;
      g2.rotate(Math.toRadians(45), centerX, centerY);
      g2.drawImage(img, 50, 50, this);
      2. 变换的累积效果
    • 每次调用变换方法,都会影响后续所有的绘图操作
    • 就像你把玻璃转了一下后,再画的任何东西都会是倾斜的
    • // 先旋转画布
      g2.rotate(Math.toRadians(30));// 第一张图片会旋转
      g2.drawImage(img1, 50, 50, this);// 第二张图片也会旋转(即使没写rotate代码)
      g2.drawImage(img2, 200, 50, this);

      三、如何控制变换范围?

      如果你只想让特定图片旋转,而不影响其他图片,可以:

      1. 临时保存和恢复变换状态
      // 保存当前变换状态
      AffineTransform oldTransform = g2.getTransform();// 旋转并绘制第一张图片
      g2.rotate(Math.toRadians(45), centerX, centerY);
      g2.drawImage(img1, 50, 50, this);// 恢复变换状态("把玻璃转回原样")
      g2.setTransform(oldTransform);// 现在绘制第二张图片,它不会旋转
      g2.drawImage(img2, 200, 50, this);
      2. 只在特定范围内应用变换
    • // 绘制不变换的图片
      g2.drawImage(img1, 50, 50, this);// 创建新的Graphics2D对象(相当于拿一块新玻璃)
      Graphics2D g2Copy = (Graphics2D) g2.create();// 只在这个副本上应用变换
      g2Copy.rotate(Math.toRadians(45), centerX, centerY);
      g2Copy.drawImage(img2, 200, 50, this);// 释放副本("扔掉用过的玻璃")
      g2Copy.dispose();// 原始的g2不受影响,继续绘制其他内容
      g2.drawImage(img3, 350, 50, this);
      import java.awt.*;
      import java.awt.image.BufferedImage;
      import javax.swing.*;public class TransformExplanation extends JPanel {private BufferedImage image;public TransformExplanation() {// 创建一个简单的测试图片image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);Graphics2D g = image.createGraphics();g.setColor(Color.RED);g.fillRect(0, 0, 100, 100);g.setColor(Color.WHITE);g.drawString("A", 45, 60);g.dispose();}@Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);Graphics2D g2 = (Graphics2D) g;// 1. 绘制原始图片(没有变换)g2.drawImage(image, 50, 50, this);g2.drawString("原始图片", 50, 160);// 2. 旋转画布后绘制图片g2.rotate(Math.toRadians(45), 200, 100);g2.drawImage(image, 150, 50, this);g2.rotate(-Math.toRadians(45), 200, 100); // 恢复旋转g2.drawString("旋转后的图片", 150, 160);// 3. 变形画布后绘制图片g2.shear(0.3, 0);g2.drawImage(image, 250, 50, this);g2.shear(-0.3, 0); // 恢复变形g2.drawString("变形后的图片", 250, 160);// 4. 旋转后绘制多条线(展示整个画布被旋转)g2.rotate(Math.toRadians(30), 100, 250);g2.setColor(Color.BLUE);g2.drawLine(50, 200, 150, 200);g2.drawLine(50, 220, 150, 220);g2.drawLine(50, 240, 150, 240);g2.rotate(-Math.toRadians(30), 100, 250); // 恢复旋转g2.drawString("旋转后的画布", 50, 300);}public static void main(String[] args) {JFrame frame = new JFrame("变换原理演示");frame.add(new TransformExplanation());frame.setSize(500, 400);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);}
      }

      总结

    • 变换操作应用于画布,而不是单独的图片
    • 一旦应用变换,后续所有绘图操作都会受影响
    • 可以通过保存 / 恢复变换状态或创建副本来控制变换范围
    • 旋转中心点的选择对效果有很大影响

文章转载自:

http://X2r3ujla.kcdts.cn
http://MfEaJjBO.kcdts.cn
http://htiX9pCc.kcdts.cn
http://LzpXkgxx.kcdts.cn
http://mS7vk4Mg.kcdts.cn
http://bl4FM7uB.kcdts.cn
http://4Rgq9bYQ.kcdts.cn
http://NFpYlbYp.kcdts.cn
http://I6xZWi6A.kcdts.cn
http://ohTjPEXd.kcdts.cn
http://RWzoSqmp.kcdts.cn
http://gAL1WRSD.kcdts.cn
http://wevq6uh7.kcdts.cn
http://PXgkV9l9.kcdts.cn
http://PfLej5zv.kcdts.cn
http://zAPCWyTw.kcdts.cn
http://YKUXO97U.kcdts.cn
http://l5II1N3b.kcdts.cn
http://ZHTrWw50.kcdts.cn
http://nPitbq6K.kcdts.cn
http://oOr6ja9z.kcdts.cn
http://qkKCGXbt.kcdts.cn
http://2m6bdvaM.kcdts.cn
http://IJIy98vR.kcdts.cn
http://0LEGWTh5.kcdts.cn
http://seUb7m43.kcdts.cn
http://e0SZ5Ukz.kcdts.cn
http://zlrfLx5O.kcdts.cn
http://tD3x9tOY.kcdts.cn
http://AIpXTrhq.kcdts.cn
http://www.dtcms.com/wzjs/713453.html

相关文章:

  • 淘宝网站框架搏彩网站开发建设
  • 樟树网站建设什么行业 网站
  • 大兴区网站建设公司枣庄网站建设哪家强
  • h5商城网站模板下载网页设计与制作感受
  • 做电商网站注意什么问题鹤壁建设网站推广公司
  • 网站建设三个阶段泉州网站建设技术外包
  • 南联网站建设公司滨州做网站的科技公司
  • 做网站烧钱重庆网络公司价格
  • 企业网站用什么做二次开发最快网站怎么做seo优化
  • 五百亿建站模板标志设计作业
  • 目前网站开发的主流语言是什么客户管理系统免费版
  • 佟年帮韩商言做网站是第几集wordpress入侵方法
  • 虚拟主机和云服务器的区别网站设计与优化
  • 福建建设执业管理中心网站图片编辑器在线制作
  • 网站设计制作程序wordpress 代码详解
  • 坪山网站建设高端建站模版
  • 网站mp3播放器代码成都企业网站公司
  • 摄影行业网站四川省住房和城乡建设厅厅长
  • 北京制作网站公司哪家好青岛圭谷网站建设公司
  • 立方集团 网站小程序直播开发
  • 烟台网站设计公司推荐网上商城是什么软件
  • 关于药品网站建设策划书培训机构加盟店排行榜
  • 网站策划内容有哪些wordpress文章主题
  • 上海专业的网站建设网页设计总结报告500字
  • 网站开发安全维护网站建设销售技巧话术
  • 免费建站模板哪个好保山市住房和城上建设局网站
  • 网站自动发送邮件国外建站数据
  • 公众号做视频网站网络推广好的公司
  • 江西九江永修网站建设能不能自己做视频网站
  • 东航集团客户网站是哪家公司建设深圳网站建设 贝尔利