Java旋转像素数组

2023-12-05

我尝试用java编写一个算法来旋转二维像素数组(不限于90度),我遇到的唯一问题是:最终结果在图像中留下了点/孔。


这是代码:

    for (int x = 0; x < width; x++)
    {
        for (int y = 0; y < height; y++)
        {
            int xp = (int) (nx + Math.cos(rotation) * (x - width / 2) + Math
                    .cos(rotation + Math.PI / 2) * (y - height / 2));
            int yp = (int) (ny + Math.sin(rotation) * (x - width / 2) + Math
                    .sin(rotation + Math.PI / 2) * (y - height / 2));
            int pixel = pixels[x + y * width];
            Main.pixels[xp + yp * Main.WIDTH] = pixel;
        }
    }

“Main.pixels”是一个连接到画布显示器的数组,这就是显示器上显示的内容。

“像素”和函数本身位于精灵类中。 sprite 类在程序初始化时从“.png”图像中获取像素。


我尝试过查看“旋转矩阵”解决方案。但它们对我来说太复杂了。我注意到当图像接近 45 度时,图像会有些拉伸?出了什么问题?正确的代码是什么?将像素添加到更大范围的数组(例如 Main.pixels[])。

必须是java!并相对于上面的代码格式。我不是在寻找复杂的例子,只是因为我不会理解(如上所述)。简单而直接,正是我所追求的。


我希望回答这个问题。

  1. 你的公式是错误的,因为......
  2. 这样做的话,效果就是...
  3. 简化这个...
  4. 我推荐...

如果我要求太多,我很抱歉,但我一直在寻找与这个问题相关的答案,我可以理解和使用。但总是要么给出 90 度的旋转,要么给出另一种编程语言的示例。


您正在向前推动像素,但并不是每个像素都会受到离散旋转图的影响。您可以通过计算每个像素的来源来消除间隙。

代替

for each pixel p in the source
    pixel q = rotate(p, theta)
    q.setColor(p.getColor())

try

for each pixel q in the image
    pixel p = rotate(q, -theta)
    q.setColor(p.getColor())

这仍然会有视觉伪影。您可以通过插值而不是将源像素 p 的坐标四舍五入为整数值来改进这一点。


编辑:您的旋转公式看起来很奇怪,但在使用 cos(r+pi/2) = -sin(r) 和 sin(r+pi/2)=cos(r) 等三角恒等式后,它们看起来没问题。它们不应该成为任何拉伸的原因。

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

Java旋转像素数组 的相关文章

  • JAVA_HOME环境变量和Java JDK趣事

    我想让 Java 在 1 6xxx 上运行 我更改了 JAVA HOME 变量并将其指向目录 C Program Files Java jdk1 6 0 16 我重新启动 PC 我想我可以检查我的机器指向哪个版本的 Java 但它仍然指向旧
  • 方法重载。你能过度使用它吗?

    当定义多个使用不同过滤器返回相同形状的数据的方法时 什么是更好的做法 显式方法名称或重载方法 例如 如果我有一些产品并且我正在从数据库中提取 显式方式 public List
  • cygwin有java sdk吗?

    cygwin有java sdk吗 如果有一个使用 cygwin 文件系统和 X windows 进行显示的本机 cygwin 实现 那就太好了 不幸的是我不知道这样的版本 我认为移植 OpenJDK 也需要付出很大的努力 但我还没有尝试过
  • 将倒计时器从 10 秒改为 1 秒

    我有一个倒计时器 它以 1 秒的增量从 10000 毫秒倒计时到 0 毫秒 以使按钮在 10 秒后可单击 尽管计时器是准确的并且按照代码的说明执行操作 但我想更改秒的表示方式 但我不知道如何更改 java void startTimer c
  • 如何在Java中使用我的密码加密和解密字符串(PC而非移动平台)? [复制]

    这个问题在这里已经有答案了 我想加密一个字符串然后将其放入文件中 当我想要的时候也想解密它 我不需要很强的安全性 我只是想让其他人更难获取我的数据 我尝试了几种方法 这是这些 Md5加密 如何在 Android 中对字符串进行哈希处理 ht
  • Guice:当 FactoryBuilder 中提供合适的构造函数时,“找不到合适的构造函数”

    我使用 Guice 进行依赖注入 但收到此错误 1 Could not find a suitable constructor in java lang Void Classes must have either one and only
  • 视频文件转换/转码 Google App Engine

    我想启动一个云计算项目 其简单任务是 接收上传的视频文件 对它们进行一些转码 转换 允许用户下载 流式传输生成的文件 我刚在想ffmpeg作为集成在的外部命令行工具Java Google App engine Application 由于很
  • 如何通过两跳 SSH 隧道使用 JProfiler

    我正在尝试将 JProfiler 连接到在我将调用的服务器上运行的 JVMremote 该服务器只能从我的工作站访问 local 通过我将调用的另一台服务器middle 我的计划是将 JProfiler 连接到remote是这样的 安装 J
  • Spring批量写入器限制

    我正在工作 Spring Batch 项目 从数据库读取记录然后写入rabbitmq 然后发送到HTTP消息网关 网关有150TPS我需要将我的应用程序限制为 150TPS 有没有办法带弹簧批的油门或者还有其他更好的方法吗 你能行的 在 S
  • 按像素值偏移 gl_Position 或 gl_Vertex

    我的属性包含像素值 我想用这个属性值来偏移我的 gl vertex 问题是我的 gl vertex 以世界单位为单位 而 offset attribute 以像素为单位 如果我将屏幕尺寸作为统一发送 然后将像素转换为 1 到 1 值 并将其
  • android.os.FileUriExposedException 在 Oreo 中引起(仅!)[重复]

    这个问题在这里已经有答案了 从 Google Play Console 中 我可以看到此异常仅发生在 Android 8 0 的设备上 android os FileUriExposedException at android os Str
  • Logback 配置在单行上有异常吗?

    我的日志被提取 传输并合并到 elasticsearch 中 多行事件很难跟踪和诊断 有没有办法使用收集器和正则表达式将异常行分组到单个记录中登录配置 https logback qos ch manual layouts html xTh
  • SQLiteAssetHelper 甚至在从资产文件夹复制数据库之前就导致立即崩溃

    https github com jgilfelt android sqlite asset helper https github com jgilfelt android sqlite asset helper 我要从SQLiteOpe
  • MongoDb Spring 在嵌套对象中查找

    我正在使用 Spring Data Mongodb 和这样的文档 id ObjectId 565c5ed433a140520cdedd7f attributes 565c5ed433a140520cdedd73 333563851 list
  • 如何在 Java 中读取/转换 InputStream 为字符串?

    如果你有一个java io InputStream对象 您应该如何处理该对象并生成一个String 假设我有一个InputStream包含文本数据 我想将其转换为String 例如我可以将其写入日志文件 最简单的方法是什么InputStre
  • Spring Boot - 如何在开发过程中禁用@Cacheable?

    我正在寻找两件事 如何在开发过程中使用 Spring boot dev 配置文件禁用所有缓存 application properties 中似乎没有通用设置可以将其全部关闭 最简单的方法是什么 如何禁用特定方法的缓存 我尝试像这样使用 S
  • Maven编译错误:包不存在

    我正在尝试向现有企业项目添加 Maven 支持 这是一个多模块项目 前 2 个模块编译和打包没有问题 但我面临编译错误 我尝试在多个模块中使用相同的依赖项 我的结构是 gt parent gt pom xml gt module 1 gt
  • 如何在java中进行多处理,以及预期的速度提升是多少?

    我是一个新手 使用 Java 对 csv 文件进行一些数据处理 为此 我使用 Java 的多线程功能 线程池 将 csv 文件批量导入到 Java 中 并对每一行执行一些操作 在我的四核处理器上 多线程大大加快了处理速度 我很想知道多处理如
  • 旧的和奇异的 JVM 上 java.io.BufferedInputStream 的默认缓冲区大小是多少?

    我一直在为一篇关于以下内容的博客文章进行一些研究java io BufferedInputStream和缓冲区 显然 多年来 默认值已从区区 512 字节增长到 8192 字节 冒昧地 Sun 的 Java 7 实现 甚至在JDK 1 1
  • Encog:BasicNetwork:无需预先构建数据集的在线学习

    我正在尝试使用 encog 库作为强化学习问题的函数逼近器 更准确地说 我正在尝试启动并运行多层感知器 BasicNetwork 由于我的代理将根据我选择的任何 RL 算法以某种方式探索世界 因此我无法预先构建任何 BasicNeuralD

随机推荐

  • 如何将已处理的工具项放置在右侧

    我有一个基于 eclipse e4 框架构建的应用程序 我想定位一个Handled Tool Item到最右端 我怎样才能实现它 You need to use two Toolbar entries with a Tool Control
  • 将 JDBC 数据库中的数据检索到 Jtable 中

    您好 我已成功将 jTable 链接到 JDBC 数据库 但是 我在检索它们时遇到了困难 我希望在重新启动程序时显示保存的数据 但它不起作用 alarm setText DefaultTableModel model DefaultTabl
  • Bootstrap 3 导航栏链接在应水平显示时显示垂直

    按照 Michael Hartl 的 ruby on Rails 教程 并将 bootstrap 导入到 custom css scss 文件中后 链接显示为块 垂直 而实际上它们应该是水平的 导致导航栏非常厚 如下所示 所以问题是我做错了
  • 能否逐页关闭 Visual Studio 2013 浏览器链接

    我喜欢 Visual Studio 2013 浏览器链接的检查器功能 但是 我的页面数量很少 大部分是自定义音频 视频媒体播放器 这会导致浏览器每秒发出大量信号请求 在每秒 200 个范围内 因此 我想禁用这些特定页面上的功能 我知道可以通
  • TabControl 上图像对齐的问题

    我正在使用 c winformTabControl 我创建了一个ImageList 将其与TabControl并用一些图像填充它 问题是 当我设置ImageIndex or ImageKey对于特定选项卡 图像显示在选项卡上 但它覆盖了选项
  • 无法使用 Unity 将 DBContext 注入我的 Web API 2 控制器

    我已经研究了好几天了 但我无法让 Unity 注入任何东西RegisterType lt gt 进入我的Controller 我在 Visual Studio 2015 中使用 Web Api 2 和 Unity 4 每当我尝试注入时IUn
  • 如何在实体框架上应用全局过滤器?

    我的模型中有一个名为 Customers 的表 其中包含 IsActive 字段 每当我对客户运行查询时 只应检索活动客户 我可以在每个查询中包含过滤器 但这看起来不太好 我希望能够覆盖 对象上下文 杠杆上的 客户 属性 但我不确定这是否可
  • Python Fabric:跳过需要密码的登录

    我有一个与此类似的问题 如何跳过要求输入密码的 Fabric 连接 没有答案 我正在寻找一种方法让 Fabric 认为任何要求密码而不是 SSH 密钥登录的主机都是不好的 因为这意味着我正在连接的用户在服务器上没有帐户 而且我迭代大量主机列
  • webpack - DefinePlugin 方法

    在 webpack 插件的定义中 我尝试提供一个覆盖函数 如果该方法存在 我的模块将拾取该函数 export const listFetchAPI gt return LIST FETCH API LIST FETCH API list e
  • 在 symfony 中存储要在服务中使用的加密参数的最佳方式是什么?

    我目前将机密存储在纯文本的parameters yml 中 我想保留一些参数和环境变量作为秘密 这样只有我自己和 Symfony 知道数据库的凭据 有没有办法在 Symfony 3 2 中保护我的秘密 环境变量和参数 我可以举个例子吗 谢谢
  • 如何控制 iOS Sprite Kit SKVideoNode 中视频的播放?

    我将视频加载到 Sprite Kit SKVideoNode 中 但如何停止和重新开始播放或转到视频中的特定时间 我看到的只是播放和暂停方法 AVPlayer NSURL fileURL NSURL fileURLWithPath NSBu
  • 我可以在不使用 new 关键字的情况下构造 JavaScript 对象吗?

    这是我想做的 function a function b Some magic return a new object var c b c instanceof b gt true c instanceof a gt true b inst
  • Nodejs-Mysql 查询表名作为变量

    我如何将表名作为变量传递 基本上我想制作一个函数 其中我将表名作为参数 并使用nodejs在mysql数据库中插入记录对象 我的功能就像 exports insertIntoDb function tableName insertObj c
  • 在 Dockerfile 中使用代理运行 apt-get

    我在代理后面 我需要通过安装一些东西apt get 我带来的最好的就是这个 ARG PROXY ENV http proxy PROXY ENV https proxy PROXY RUN apt get update y apt get
  • PHP 正则表达式 - 有效的浮点数

    我希望用户只输入 0 9 并且只输入一次 patt 0 9 1 1 2222 gt true 1 2 2 gt false only once 帮帮我 谢谢 d d d 这与正常的浮动相匹配 例如3 14 仅小数部分的简写 例如 5和整数
  • kubectl:连接被拒绝

    我正在按照 kubernetes 在 Ubuntu 16 04 中安装 minkube 0 19 1文档 作为先决条件 我已经安装了 kubectl 和 Oracle VirtualBox 当我检查 kubectl 时kubectl ver
  • 使用 BeautifulSoup find_all 从最后一个元素获取内容

    我正在尝试从 find all 创建的列表中的最后一个 div 中提取内容 post content soup find all div class body content inner 存储以下文本 div class body cont
  • 回调中的问号

    static setItem key string value string callback error Error gt void 这是AsyncStorage中setitem的声明 第三个参数是回调 有人可以解释一下这里问号的使用吗
  • Facebook 应用程序安全画布 URL

    我对 Facebook 应用程序安全画布 URL 有一些疑问 对于 Facebook 应用程序安全画布 URL 或安全页面选项卡 URL 是否需要特定类型的 SSL 证书 或者任何类型都可以 由于我使用一个域来托管不同应用程序中的所有内容
  • Java旋转像素数组

    我尝试用java编写一个算法来旋转二维像素数组 不限于90度 我遇到的唯一问题是 最终结果在图像中留下了点 孔 这是代码 for int x 0 x lt width x for int y 0 y lt height y int xp i