Java旋转图像变成全黑?

2023-11-29

我正在制作一个基本的java应用程序并尝试旋转图像。我写了以下快速方法

private Image rotate(double degs){
    ImageIcon img = new ImageIcon("src/inc/img/char_male.png");
    Image temp = new BufferedImage(img.getIconWidth(), img.getIconHeight(), BufferedImage.TYPE_INT_RGB);
    Graphics2D g2 = (Graphics2D) temp.getGraphics();
    g2.rotate(Math.toRadians(degs));
    g2.drawImage(img.getImage(), 0, 0, Color.WHITE, null);
    System.out.println("Rotating "+degs);
    g2.dispose();
    return temp;
}

问题是当我运行它并重新绘制 GUI 时,图像变成纯黑色。我在创建 BufferedImage 时做错了什么吗?我正在使用 JLabel 更改重绘中的 GUI,

label.setIcon(new ImageIcon(rotate(90)));

您需要同时旋转和平移,使旋转中心为图像的中心。 AffineTransform 旋转方法对此有一个重载,Graphics2D 旋转方法也是如此。例如,如果你尝试...

private Image rotate(double degs){
    ImageIcon img = new ImageIcon("src/inc/img/char_male.png"); // why an ImageIcon???
    Image temp = new BufferedImage(img.getIconWidth(), img.getIconHeight(), BufferedImage.TYPE_INT_RGB);
    Graphics2D g2 = (Graphics2D) temp.getGraphics();
    g2.rotate(Math.toRadians(degs), img.getIconWidth()/2, img.getIconHeight()/2); // changed
    g2.drawImage(img.getImage(), 0, 0, Color.WHITE, null);
    System.out.println("Rotating "+degs);
    g2.dispose();
    return temp;
}

抱歉,这是更正后的代码:

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class ImageRotate {
   private static final String IMAGE_PATH = "src/yr2011/images/guitar_3406632_n.jpg";

   public static void main(String[] args) {
      try {
         BufferedImage image = ImageIO.read(new File(IMAGE_PATH));
         ImageIcon icon = new ImageIcon(image);
         JOptionPane.showMessageDialog(null, new JLabel(icon));

         icon = new ImageIcon(rotate(image, 90));
         JOptionPane.showMessageDialog(null, new JLabel(icon));
      } catch (IOException e) {
         e.printStackTrace();
      }
   }

   private static Image rotate(Image image, double degs) {
      int width = image.getWidth(null);
      int height = image.getHeight(null);
      BufferedImage temp = new BufferedImage(height, width, BufferedImage.TYPE_INT_RGB);
      Graphics2D g2 = temp.createGraphics();
      g2.rotate(Math.toRadians(degs), height / 2, height / 2);
      g2.drawImage(image, 0, 0, Color.WHITE, null);
      g2.dispose();
      return temp;
   }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java旋转图像变成全黑? 的相关文章

  • Java - 因内存不足错误而关闭

    关于如何最好地处理这个问题 我听到了非常矛盾的事情 并且陷入了以下困境 OOME 会导致一个线程崩溃 但不会导致整个应用程序崩溃 我需要关闭整个应用程序 但不能 因为线程没有剩余内存 我一直认为最佳实践是让它们离开 这样 JVM 就会死掉
  • “java.io.IOException:连接超时”和“SocketTimeoutException:读取超时”之间有什么区别

    如果我设置一个套接字 SoTimeout 并从中读取 当读取时间超过超时限制时 我会收到 SocketTimeoutException 读取超时 这是我的例子中的堆栈 java net SocketTimeoutException Read
  • Oracle Java 教程 - 回答问题时可能出现错误

    我是 Java 新手 正在阅读 Oracle 教程 每个部分之后都有问题和答案 我不明白一个答案中的一句话 见下面的粗体线 来源是https docs oracle com javase tutorial java javaOO QandE
  • Logback:SizeAndTimeBasedRollingPolicy 不遵守totalSizeCap

    我正在尝试以一种方式管理我的日志记录 一旦达到总累积大小限制或达到最大历史记录限制 我最旧的存档日志文件就会被删除 当使用SizeAndTimeBasedRollingPolicy在 Logback 1 1 7 中 滚动文件追加器将继续创建
  • 您建议使用哪种压缩(GZIP 是最流行的)servlet 过滤器?

    我正在寻找一个用于大容量网络应用程序的 GZIP servlet 过滤器 我不想使用容器特定的选项 要求 能够压缩响应负载 XML Faster 已在大批量应用的生产中得到验证 应适当设置适当内容编码 跨容器移植 可选择解压缩请求 谢谢 我
  • 为自定义驱动程序创建 GraphicsDevice

    我正在开发一个在嵌入式系统中使用 Java 的项目 我有用于屏幕和触摸输入的驱动程序 以及用于文本输入的虚拟键盘 我的屏幕驱动程序有一个Graphics2D您可以绘制的对象和repaint Rectangle 更新方法 类似地 触摸驱动器能
  • Java中的断点和逐步调试?

    抱歉我的问题名称很奇怪 我不知道如何寻找这个 因为我不知道这些东西是如何称呼的 Visual Studio 中至少有一个功能 您可以单击代码左侧并设置一个大红点的起点 然后运行程序 您可以通过按 f8 或 f5 实际上是不同的 f 来跟踪步
  • Android蓝牙java.io.IOException:bt套接字已关闭,读取返回:-1

    我正在尝试编写一个代码 仅连接到运行 Android 5 0 KitKat 的设备上的 目前 唯一配对的设备 无论我尝试了多少方法 我仍然会收到此错误 这是我尝试过的最后一个代码 它似乎完成了我看到人们报告为成功的所有事情 有人能指出我做错
  • 在 MongoDB 和 Apache Solr 之间同步数据的简单方法

    我最近开始使用 MongoDB 和 Apache Solr 我使用 MongoDB 作为数据存储 并且希望 Apache Solr 为我的数据创建索引 以实现应用程序中的搜索功能 经过一些研究 我发现 基本上有两种方法可以在 MongoDB
  • Java:从集合中获取第一项

    如果我有一个集合 例如Collection
  • 当 minifyEnabled 为 true 时 Android 应用程序崩溃

    我正在使用多模块应用程序 并且该应用程序崩溃时minifyEnabled true in the installed模块的build gradle 以下是从游戏控制台检索到的反混淆堆栈跟踪 FATAL EXCEPTION Controlle
  • 通过 appassembler-maven-plugin 生成的脚本无法在 Spring Boot 应用程序中找到主类

    我使用 appassembler maven plugin 生成的启动脚本有问题 我有一个基本的 spring boot 应用程序 只有一个类 SpringBootApplication public class ScriptDemoApp
  • Java:如何确定文件所在的驱动器类型?

    Java 是否有一种独立于平台的方法来检测文件所在的驱动器类型 基本上我有兴趣区分 硬盘 可移动驱动器 如 USB 记忆棒 和网络共享 JNI JNA 解决方案不会有帮助 可以假设 Java 7 您可以使用 Java 执行 cmd fsut
  • JAVA中遍历JSON数据

    我是 JSON 新手 我使用 HTTPUrlConnections 并在 JAVA 程序中获得一些响应 响应数据将类似于 data id 1 userId 1 name ABC modified 2014 12 04 created 201
  • 使用Java绘制维恩图

    我正在尝试根据给定的布尔方程绘制维恩图 例如 a AND b AND c我想在 Android 手机上执行此操作 因此我需要找到一种使用 Java 来执行此操作的方法 我找到了一个完美的小部件 它可以完成我在这方面寻找的一切布尔代数计算器
  • 替换文件中的字符串

    我正在寻找一种方法来替换文件中的字符串而不将整个文件读入内存 通常我会使用 Reader 和 Writer 即如下所示 public static void replace String oldstring String newstring
  • 使用 Java https 上传到 Imgur v3 错误

    我目前正在尝试使用他们当前的 API v3 上传到 imgur 但是我不断收到错误 错误 javax net ssl SSLException 证书中的主机名不匹配 api imgur com imgur com OR imgur com
  • 记录类名、方法名和行号的性能影响

    我正在我的 java 应用程序中实现日志记录 以便我可以调试应用程序投入生产后可能出现的潜在问题 考虑到在这种情况下 人们不会奢侈地使用 IDE 开发工具 以调试模式运行事物或单步执行完整代码 因此在每条消息中记录类名 方法名和行号将非常有
  • 检查应用程序是否在 Android Market 上可用

    给定 Android 应用程序 ID 包名称 如何以编程方式检查该应用程序是否在 Android Market 上可用 例如 com rovio angrybirds 可用 而 com random app ibuilt 不可用 我计划从
  • 基于 Spring Boot 的测试中的上下文层次结构

    我的 Spring Boot 应用程序是这样启动的 new SpringApplicationBuilder sources ParentCtxConfig class child ChildFirstCtxConfig class sib

随机推荐

  • ASP.net 在按下按钮时动态添加控件。回发问题

    我有一个包含多个按钮的用户控件 根据按下的按钮 不同的控件会添加到页面中 假设按钮 1 添加一个文本框 按钮 2 添加一个标签 我的代码大致如下 protected void but1 click object sender EventAr
  • 如果表包含大量未使用/未选择的列,是否会影响性能?

    背景 我有一个名为 cars 的表 其中包含大量二手车 大约 100 万行 该表有 170 多列 该表仅在各个列上建立索引 大多数列是布尔值 例如 has automatic gearbox 等 其余是字符串和数字 例如颜色和价格 这些汽车
  • vs 代码显示双重建议

    Sample 1 Sample 2 每当我编写时 VS Code 智能感知都会在 python 中显示双重建议 VS Code 中是否有设置 以便我可以将它们更改为正常状态 Press Ctrl Shift X查看是否安装了其他提示扩展并同
  • 如何更改字符串数组中的单个字符?

    有这个 include
  • 在 T-SQL 中替换没有游标的字符串中出现的字符串列表

    孩子 这真是一口 我想从字符串中解析标记 标记可以是单词或短语 我想要的是将任何标记的每次出现替换为字符串 我想在不使用光标的情况下执行此操作 Ex declare str varchar 256 I want this type to b
  • 从 Visual Studio 2017 使用 OData 服务

    我在使用 Dynamics Nav OData 时遇到问题 我正在使用 Visual Studio Community 2017 版本 15 9 0 并且我已经安装了扩展 OData Connected Service 官方 Microso
  • 可以对引用和非引用进行泛型吗?

    我正在尝试编写使引用成为非引用的代码Copy根据需要键入 同时直接使用该值 如果是 Copy 因为它是一个参考 考虑以下示例 struct Wrapper
  • 在 Python 3.6.2 上写入文件然后读取它

    target open test txt w target write ffff print target read 运行以下 python 脚本时 test txt 是一个空文件 它会打印一个空字符串 但是 当重新打开文件时 它可以很好地
  • 有什么方法可以知道数组列表是否包含一段文本?

    我有一个包含多个项目的数组列表 假设它们是 深棕色 蓝色 绿色 有什么方法可以查找我的某些商品中是否有字符串 DARK 我知道 contains 可以做到这一点 但只有当字符串完全正确时它才会这样做 我的想法是寻找以我的项目之一开头但没有所
  • 参考qt快速控制选项卡视图中的错误

    我用TabView编写了一个QT Quick程序 当我单击 Tabview 中的按钮 b1 时 程序应该调用 show text 并打印 b1 的文本 但它打印 ReferenceError b1 未定义 任何建议将不胜感激 谢谢 impo
  • 将 glut 链接到 Qt

    我想将 OpenGL 与 glut 结合到 Qt 中 我正在使用 Windows 我的 Qt 版本是 4 7 4 32 位 我按照教程进行操作 http www youtube com watch v 1nzHSkY4K18 我还查了一些人
  • SQL 年度总和报告,寻找优雅的解决方案

    我有一个包含 3 列的表 ItemCode Quantity 和 DocDate 我想以更 优雅 的方式创建以下报告 SELECT T0 ItemCode SELECT SUM QUANTITY FROM MyTable T1 WHERE
  • spring-boot-maven-plugin 打破了同级模块依赖

    我有一个多模块 Maven 设置 一个父模块 加上两个子模块 子模块 A 和 B 模块 B 依赖于 A 但是 如果我在模块 A 中使用 spring boot maven plugin 则编译依赖关系不会得到解决 模块 B 的编译目标将抛出
  • 动态改变过滤器表达式

    我有一系列记录 该数组将根据用户的权限显示不同的记录 因此我必须根据用户使用不同的过滤器 我如何创建这样一个表达式 它根据用户的许可采用变量函数 div item name 其中表达式在范围上定义 scope filterExpr test
  • 使用 SaveChanges 的同一事务从 EF 调用 SP

    有人知道如何使用 objectContext SaveChanges 方法 EntityFramework 5 的同一事务来调用 StoredProc 吗 目标是应用对象更改并调用对数据库执行一些 魔法 的存储过程 但是 如果出现问题 无论
  • 连接到 Azure 容器注册表的 Azure 逻辑应用

    我已经在 LogicApp 中设置了 身份 在容器注册表中添加了必要的 AcrPull 访问权限 但无法让逻辑应用访问 Azure 中的私有容器注册表 出现错误 error code InaccessibleImage message Th
  • 在 C# .NET 中检查静态或动态 IP 地址?

    我正在构建一个非常基本的表单应用程序 我可以获得本地计算机上可用的 IP 地址列表 但是 我还想确定如何获取这些地址 例如 DHCP 或静态 如何判断系统上是否配置了静态 IP 地址 目标是告知新手最终用户 可能不了解网络设置或如何获取网络
  • 更改imshow的轴比例

    我正在 MATLAB 中可视化一个矩阵imshow 但是 我希望 y 和 x 轴交换位置 使 x 对应于矩阵的行索引 y 对应于列索引 我还想将轴的增量值更改为 0 01 以便第 10 行的 x 值为 0 1 第 100 行的 x 值为 1
  • 我在两个不同的系统中有一个远程存储库和两个远程存储库

    我在两个不同的系统中有一个远程存储库和两个远程存储库 在一个系统中 我将修改代码并将其推送到远程存储库 如何使用 git hooks 自动更新另一个本地存储库中的代码 如果您有一个本地存储库推送到远程存储库 并且希望更新第二个远程存储库 则
  • Java旋转图像变成全黑?

    我正在制作一个基本的java应用程序并尝试旋转图像 我写了以下快速方法 private Image rotate double degs ImageIcon img new ImageIcon src inc img char male p