如何旋转缓冲图像而不裁剪它?有没有办法旋转 JLayeredPane 或 JLabel?

2023-12-03

我已经搜索过,但没有得到直接的答案。 我想要旋转但不裁剪缓冲图像 我知道新的维度会是这样的

int w = originalImage.getWidth();
int h = originalImage.getHeight();
double toRad = Math.toRadians(degree);
int hPrime = (int) (w * Math.abs(Math.sin(toRad)) + h * Math.abs(Math.cos(toRad)));
int wPrime = (int) (h * Math.abs(Math.sin(toRad)) + w * Math.abs(Math.cos(toRad)));

给我一个方法。

顺便说一句,有什么办法可以旋转JLabelImageIcon?

意图:添加到面板和分层窗格并将其保存到文件(保存分层窗格)。

或者我们可以旋转分层窗格吗?


如何旋转缓冲图像而不裁剪它?

通过计算旋转的大小,您已经完成了一半的工作BufferedImage。 另一半实际上是创建旋转的BufferedImage。 你可以通过使用来做到这一点Graphics2D并在将原始图像绘制到新图像上之前应用一些坐标变换。此外,用一些背景颜色绘制“多余”区域是有意义的。

public BufferedImage rotateImage(BufferedImage originalImage, double degree) {
    int w = originalImage.getWidth();
    int h = originalImage.getHeight();
    double toRad = Math.toRadians(degree);
    int hPrime = (int) (w * Math.abs(Math.sin(toRad)) + h * Math.abs(Math.cos(toRad)));
    int wPrime = (int) (h * Math.abs(Math.sin(toRad)) + w * Math.abs(Math.cos(toRad)));

    BufferedImage rotatedImage = new BufferedImage(wPrime, hPrime, BufferedImage.TYPE_INT_RGB);
    Graphics2D g = rotatedImage.createGraphics();
    g.setColor(Color.LIGHT_GRAY);
    g.fillRect(0, 0, wPrime, hPrime);  // fill entire area
    g.translate(wPrime/2, hPrime/2);
    g.rotate(toRad);
    g.translate(-w/2, -h/2);
    g.drawImage(originalImage, 0, 0, null);
    g.dispose();  // release used resources before g is garbage-collected
    return rotatedImage;
}

这是上面代码的测试示例:

Original image
original

Rotated image (by 30 degree)
rotated

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何旋转缓冲图像而不裁剪它?有没有办法旋转 JLayeredPane 或 JLabel? 的相关文章

  • ScheduledThreadPoolExecutor如何在特定时间运行任务?

    特别是 它是否像这样在内部实现了 while true 循环 while System currentTimeMillis lt timeToRunTask Thread sleep 1000 doTask From http grepco
  • 如何使用 Maven Failsafe 插件运行 JUnit 5 集成测试?

    当我运行命令时 Maven Failsafe 插件找不到我的 JUnit 5 集成测试mvn clean failsafe integration test 尽管它可以找到文件 我有junit jupiter api and junit j
  • 单元测试组合服务方法

    我正在为一个类编写 junit 单元测试 该类使用以下方法实现公开的接口 public Set
  • 如何配置 Spring-WS 以使用 JAXB Marshaller?

    感谢您到目前为止对此的帮助 我正在更新问题 因为我没有显示我需要的所有内容 并显示了建议的更改 肥皂输出仍然不是我想要的 servlet xml
  • 在 Java 中从 SOAPMessage 获取原始 XML

    我已经在 J AX WS 中设置了 SOAP WebServiceProvider 但我无法弄清楚如何从 SOAPMessage 或任何 Node 对象获取原始 XML 下面是我现在获得的代码示例 以及我试图获取 XML 的位置 WebSe
  • 项目缺少所需的注释处理库

    我的 Eclipse IDE 突然在问题视图中显示 xxxx 项目缺少所需的注释处理库 xxxx M2 REPO 中的一些旧 jar 我用谷歌搜索 没有找到任何答案 为什么我的项目使用旧的 jar 以及错误来自哪里 To remove th
  • 尝试获取屏幕上绘制的每个随机圆圈的 x、y 坐标

    您好 我正在制作一款游戏 该游戏将在屏幕上创建随机圆圈 随机创建的圆圈的值为红色或绿色 我的问题是 我希望不仅能够确定用户何时单击其中一个圆圈 而且还能够确定他们最终单击的圆圈 红色或绿色 下面是我的代码 我的主要问题是试图找到将要绘制的圆
  • 如何为小程序提供对文件系统写入的访问权限

    我在设置小程序的策略文件时遇到问题 我是第一次这样做 不知道如何在java中设置小程序的策略文件 实际上我想授予小程序在文件系统上写入的权限 为此我必须向小程序授予文件权限 所以我创建了一个名为 java policy 的文件 并将以下代码
  • Android WebView文件上传

    我正在开发一个 Android 应用程序 基本上它是一个WebView和一个进度条 Facebook 的移动网站 m facebook com 已加载到WebView 当我单击 选择文件 按钮上传图像时 没有任何反应 我已经尝试了所有的解决
  • 需要正则表达式帮助

    我正在尝试替换两次或多次出现的 br like br br br 标签与两个一起 br br 具有以下模式 Pattern brTagPattern Pattern compile lt s br s s gt s 2 Pattern CA
  • 在 Junit 测试中使用 ReflectionTestUtils.setField()

    我是 JUnittesting 的新手 所以我有一个问题 谁能告诉我为什么我们使用ReflectionTestUtils setField 在我们的 Junit 测试示例中 正如评论中提到的 java 文档很好地解释了用法 但我还想给你们举
  • 在 Java 中创建 T 的新实例

    在C 中 我们可以定义一个泛型class A
  • LocalDate 减去 period 得到错误的结果

    LocalDate减去一个Period 如 28年1个月27天 得到错误的结果 但减去一个Period 只有天单位 如 10282 天 得到正确的结果 有什么需要注意的吗 public static void main String arg
  • 改变 Java 中凯撒移位的方向

    用户可以通过选择 1 向左或 2 向右移动字母来选择向左或向右移动 左边工作正常 右边不行 现在它显示了完全相同的循环 但我已经改变了所有 and 以不同的方式进行标记 最终我总是得到奇怪的字符 如何让程序将字符向相反方向移动 如果用户输入
  • MongoDB java 驱动程序 3.0 在身份验证时无法捕获异常

    我超级卡住o 0 在尝试通过 Java 驱动程序进行身份验证时 存在捕获异常的问题 正如你可能会看到的Throwable类不工作 private MongoClient mongoClient private MongoDatabase m
  • Java 中处理异步响应的设计模式

    我读过类似问答的答案 如何在 JAVA 中创建异步 HTTP 请求 https stackoverflow com questions 3142915 how do you create an asynchronous http reque
  • Java String ReplaceAll 方法给出非法重复错误?

    我有一个字符串 当我尝试运行时replaceAll方法 我收到这个奇怪的错误 String str something op str str replaceAll o n it works fine str str replaceAll n
  • JPA 将 BigDecimal 作为整数保存在数据库中

    我在数据库中有这个字段 ITEMCOST NUMERIC 13 DEFAULT 0 NOT NULL 在JAVA中 Entity中的字段定义如下 Column name ITEMCOST private BigDecimal itemCos
  • 你能快速告诉我这个伪代码是否有意义吗?

    我相信我的代码现在是万无一失的 我现在将写出伪代码 但我确实有一个问题 为什么 DRJava 要求我返回 if 语句之外的内容 正如你所看到的 我为 ex 写了 return 1 只是因为它问了 但是它永远不会返回该值 谁可以给我解释一下这
  • 如何使用 Jest 从 ElasticSearch 获取索引列表

    我正在尝试使用 Jest 检索索引列表 但我只得到 Stats statistics new Stats Builder build result client execute statistics 如何从结果中检索索引列表 除了统计之外

随机推荐

  • 特征无支持张量到特征矩阵

    I get a Eigen Tensor
  • 控制台键盘敲击检测和解释

    嘿 有人建议我应该使用 kbhit 函数来检测控制台窗口中的按键 如果是 Windows kbhit 函数就是您想要的 如果是 nix 这里有一个 kbhit 模拟器 kbhit 立即返回 无阻塞 并带有一个标志 表明有或没有键盘等待读取的
  • 是否可以使用 Agda 作为库?

    是否可以直接从 Haskell 将其用作库 而不是在文件系统 使用 EMACS 终端等 上使用 Agda 例如 UsingAgda hs import Agda Prints the type of a term on some Agda
  • 基于付款方式的动态自定义订单号

    我的functions php 文件中有以下代码 add filter woocommerce order number change woocommerce order number function change woocommerce
  • C2DM / Phonegap 插件?

    我想将推送消息添加到我的 Phonegap Android 应用程序中 并相信 C2DM 是实现这项工作的最佳方式 可以为我指明正确的方向来设置它吗 有插件或教程可以帮助解决这个问题吗 另外 我真的需要一个插件 是否可以以传统的 Andro
  • jQuery animate({left:"+=10"}) 不起作用

    p this is some text that i am going to animate p 我在这里绞尽脑汁为什么这没有动画 如果我改变lef
  • UIActionSheet 在 iOS8beta 中崩溃

    我的代码只在单击按钮时显示 UIActionSheet 但当我在 iPad 上使用 XCode5 1 iOS8beta 构建它时 它会崩溃 下面是我用来显示 UIActionSheet 的代码 UIActionSheet tmpAction
  • 使用 CodeIgniter 动态调整图像大小

    我正在编写一个从 Dropbox 下载文件的脚本 应该调整该图像的大小 然后将其发送到 S3 存储桶 由于某种原因 我无法调整图像大小 我不断收到以下错误 图片路径不正确 您的服务器不支持处理此类图像所需的GD功能 代码库 public f
  • “Cont r a”能否对其延续的结果进行后处理

    the Cont r atype 代表一个需要延续的函数a gt r并产生类型的结果r 所以无论是延续还是整个Cont r a产生相同的结果type r 我的问题是 两个结果一定相同吗value 或者可以Cont r a对延续的结果进行后处
  • MongoDB DateTime 对象和 YYYY-MM-DD 字符串之间的区别

    在 MongoDB 中 我只需要进行日期范围查询 但数据集很大 9 M 将字符串转换为 DateTime 对象 我使用 Perl 脚本 然后将它们插入到 MongoDB 中非常耗时 如果我只是将日期存储为字符串 YYYY MM DD 范围查
  • css / html - 删除 li 标签之前的空格

    我想删除 li 标签之前的空格 标记为黄色 但我不知道如何操作 我阅读了有关此问题的其他问题 但这对我没有帮助 我尝试添加 margin 0px 这是描述问题的屏幕截图
  • Elasticsearch 2.1:结果窗口太大(index.max_result_window)

    我们从 Elasticsearch 2 1 检索信息并允许用户翻阅结果 当用户请求高页码时 我们会收到以下错误消息 结果窗口太大 from size 必须小于或等于 到 10000 但是 10020 请参阅滚动 api 以提高效率 请求大数
  • 设置边框大小

    我想让 borderpane 的边框更圆更粗 我测试了这段代码 bpi setStyle fx background color linear gradient to bottom f2f2f2 d4d4d4 fx border 12px
  • 无法在将 DataView 实例作为项目源的 WPF 数据网格中显示数据

    我正在使用 WPF 工具包中的 DataGrid 对象 我将 DataGrid 对象绑定到 DataTable 实例的默认视图 如以下代码中声明的 WeatherGrid ItemsSource weatherDataTable Defau
  • 如何使用TFS API创建新的源代码分支?

    我正在尝试使用 API 创建一个新分支 并且已经使用了两者PendBranch and CreateBranch 问题在于CreateBranch 它是否立即提交 我希望能够在分支签入时添加注释 所以 我所做的如下所示 基本上 我从 Win
  • 从 Django 中的一系列 id 中检索匹配对象的列表

    我想实现一些相对简单的事情 我想从给定一系列 id 的模型中检索所有对象 例如 从一本书的章节中检索第 5 行到第 10 行 现在在我的views py中 我 def line range request book id chapter i
  • Mac OS X Yosemite 10.10 上的 Mcrypt 与 Mamp Pro

    昨天 Yosemite 更新后 Mcrypt 扩展出现了问题 基于PHP的Laravel 框架的 artisan CLI返回 需要 Mcrypt PHP 扩展 PATH 变量似乎是正确的 哪里配置错了 更新之前一切正常 配置 which p
  • jquery ui 日期选择器限制为星期日

    我已经查看了此类问题的一些答案 但无法让它们按照我需要的方式工作 我需要让我的 jQuery UI 日期选择器只允许选择过去的星期日 这可以吗 谢谢 Enable Sunday only datepickerID datepicker da
  • Ajax 更新后重新绑定 jQuery 事件 (updatepanel)

    我的页面上有几个输入和选项元素 每个元素 几乎 都附加了一个事件 用于在页面上的某些文本发生更改时更新它们 我使用 jQuery 这真的很酷 我也用微软的Ajax框架 利用 UpdatePanel 我这样做的原因是 某些元素是根据某些服务器
  • 如何旋转缓冲图像而不裁剪它?有没有办法旋转 JLayeredPane 或 JLabel?

    我已经搜索过 但没有得到直接的答案 我想要旋转但不裁剪缓冲图像 我知道新的维度会是这样的 int w originalImage getWidth int h originalImage getHeight double toRad Mat