Java 数组操作

2024-05-13

我有一个名为 resize 的函数,它接受源数组,并将大小调整为新的宽度和高度。我认为我正在使用的方法效率低下。我听说有更好的方法可以做到这一点。无论如何,当scale是一个int时,下面的代码有效。然而,还有第二个函数称为 half,它使用调整大小将图像缩小一半。所以我将scale设置为double,并使用类型转换将其转换回int。这个方法不起作用,我不知道错误是什么(老师用自己的评分和测试这些功能,并且没有通过)。您能发现错误吗,或者是否有更有效的方法来创建调整大小功能?

public static int[][] resize(int[][] source, int newWidth, int newHeight) {

        int[][] newImage=new int[newWidth][newHeight];
        double scale=newWidth/(source.length);
        for(int i=0;i<newWidth/scale;i++)
            for(int j=0;j<newHeight/scale;j++)
                for (int s1=0;s1<scale;s1++) 
                    for (int s2=0;s2<scale;s2++) 
                        newImage[(int)(i*scale+s1)][(int)(j*scale+s2)] =source[i][j];

        return newImage; 
    }

    /**
     * Half the size of the image. This method should be just one line! Just
     * delegate the work to resize()!
     */
    public static int[][] half(int[][] source) {
        int[][] newImage=new int[source.length/2][source[0].length/2];
        newImage=resize(source,source.length/2,source[0].length/2);
        return newImage;
    }

因此,改变图像大小的一种方案是对其进行重新采样(从技术上讲,这实际上是唯一的方法,每种变化实际上只是一种不同类型的重新采样函数)。

将图像切成两半非常容易,您想要读取每个方向上的每隔一个像素,然后将该像素加载到新的一半大小的数组中。困难的部分是确保你的簿记能力强。

static int[][] halfImage(int[][] orig){
    int[][] hi = new int[orig.length/2][orig[0].length/2];

    for(int r = 0, newr = 0; r < orig.length; r += 2, newr++){
        for(int c = 0, newc = 0; c < orig[0].length; c += 2, newc++){
            hi[newr][newc] = orig[r][c];
        }
    }

    return hi;
}

在上面的代码中,我对原始图像进行索引,从第 0 行和第 0 列开始读取每隔一行中的每隔一个像素(此处假设图像是行主)。因此,r告诉我们我们正在查看原始图像中的哪一行,以及c告诉我们我们正在查看原始图像中的哪一列。orig[r][c]给我们“当前”像素。

相似地,newr and newc索引到指定的“半图像”矩阵hi。对于每个增量newr or newc我们增加r and c分别增加了 2。通过这样做,我们在迭代图像时会跳过所有其他像素。

编写一个不对小数部分(如 1/2、1/4、1/8 等)进行操作的通用调整大小例程确实非常困难。对于更复杂的因素,例如 0.13243,您需要定义一种方法来确定子像素(像素之间的点)的值。当然,这很容易做到,您可以开发一种非常简单的线性插值原理,当您需要两个像素之间的值时,您只需获取周围的像素,在它们的值之间构造一条线,然后读取子像素点距线。更复杂的插值版本可能是sinc基于插值......或广泛出版的文献中的许多其他插值之一。

放大图像的大小涉及到的事情与我们在这里所做的略有不同(如果您实际上必须编写通用的调整大小函数,您可能会考虑拆分您的函数以以不同的方式处理放大和缩小)。您需要以某种方式创建比原来更多的值——这些插值函数也适用于此。一个简单的方法可能只是在点之间重复一个值,直到有足够的值为止,并且对此也有一些细微的变化,对于特定位置,您可能会从左侧获取如此多的值,从右侧获取如此多的值。

我鼓励您考虑的是——由于这是家庭作业,我将远离实现——将缩放因子视为导致您在一张图像上进行观察并在新图像上写入的东西。当缩放因子小于 1 时,您通常会从原始图像中采样以填充新图像并忽略原始图像的一些像素。当缩放因子大于 1 时,您通常会更频繁地写入新图像,并且可能需要从旧图像中多次读取相同的值。 (我在强调差异方面做得很差,希望你能看到我所说的二元论。)

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

Java 数组操作 的相关文章

  • 如何循环遍历所有组合,例如48 选择 5 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在java中从大小为n的集合中迭代生成k个元素子集 https stackoverflow com questions 4504974 how to iteratively generate k
  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • Pig Udf 显示结果

    我是 Pig 的新手 我用 Java 编写了一个 udf 并且包含了一个 System out println 其中的声明 我必须知道在 Pig 中运行时该语句在哪里打印 假设你的UDF 扩展了 EvalFunc 您可以使用从返回的 Log
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • 如何在用户输入数据后重新运行java代码

    嘿 我有一个基本的java 应用程序 显示人们是成年人还是青少年等 我从java开始 在用户输入年龄和字符串后我找不到如何制作它它们被归类为 我希望它重新运行整个过程 以便其他人可以尝试 的节目 我一直在考虑做一个循环 但这对我来说没有用
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • 关键字“table”附近的语法不正确,无法提取结果集

    我使用 SQL Server 创建了一个项目 其中包含以下文件 UserDAO java public class UserDAO private static SessionFactory sessionFactory static se
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • Javascript 数组到 VBScript

    我有一个使用 Javascript 构建的对象数组 我需要使用 VBScript 读取它 如下例所示 我找不到在 VbScript 代码中循环遍历数组的方法myArray object 这个例子是我的问题的简化 我无法更改页面的默认语言 这
  • Eclipse 启动时崩溃;退出代码=13

    I am trying to work with Eclipse Helios on my x64 machine Im pretty sure now that this problem could occur with any ecli
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur

随机推荐

  • Autodesk Forge:dbId、objectId 和 nodeId 之间有什么区别?

    dbId objectId 和 nodeId 有什么区别 例如 以下函数的第一个参数是同一种id还是ids fitToView objectIds 模型 objectIds Id 数组 或 null getProperties dbId o
  • 多种邮件配置

    我使用 mandrill 驱动程序配置了 laravel 的邮件服务 这里没有问题 现在 在我申请的某个时刻 我需要通过 gmail 发送邮件 我做了类似的事情 backup current mail configs backup Conf
  • jQuery 在两个功能之间单击/切换

    我正在寻找一种方法 让两个单独的操作 函数 代码块 在单击某些内容时运行 然后在再次单击同一内容时运行完全不同的块 我把这个放在一起 我想知道是否有更有效 优雅的方式 我了解 jQuery toggle http api jquery co
  • Django excel save_book_to_database() 在使用 Django 1.8 的最新版本中损坏

    我一直在使用 Django 1 8 浏览 django excel 文档 但无法获得save book to database 上班 它要么默默地失败 要么给出以下错误 tuple object has no attribute meta
  • 标准和定制 GATT 特征

    我正在为 Android 手机和 Android 手表 wearOS 编写应用程序 这些应用程序将通过蓝牙相互通信 基本上Android手机上的应用程序将与WearOS设备绑定 然后与WearOS上的应用程序通信以启动指定功能 获取电池信息
  • 在 JavaScript 中使用 Pylons 全局变量(转义括号)

    我正在尝试访问 JavaScript 中 Python 全局变量中保存的字典中的结果 var selected jQuery target option selected text var list c persons by permiss
  • 如何定义/传递 sonata-admin 的实体管理器

    我跟着本教程 http symfony2 ylly fr sonataadminbundle fosuserbundle have a good base project jordscream 使用 FOSUserBundle 安装 Son
  • 恒定大小数组的运行中位数

    我正在尝试找到恒定大小数组的中位数 但数组总是在更新 我的意思是新号码被旧号码替换 我称这个过程为运行中位数 或者我们可以说动态中位数 这是我的代码 在代码内部 当 rand 函数生成 78 时 代码无法找到正确的中位数 78 41 67
  • 在recyclerview中notifydatachange期间保留连锁反应

    我开始修改我的应用程序以支持棒棒糖 基本上 我有一个带有 recyclerview 的文件浏览器片段 当用户打开这个片段时 他将看到其根目录上的所有文件夹 当用户单击该文件夹时 我需要获取所有子文件夹 文件并将它们显示给用户使用与notif
  • 当我尝试从列表中删除元素时,如何忽略 ValueError?

    如果我打电话 如何忽略 不在列表中 错误消息a remove x when x不在列表中a 这是我的情况 gt gt gt a range 10 gt gt gt a 0 1 2 3 4 5 6 7 8 9 gt gt gt a remov
  • cin >> num1, num2 有什么问题吗?

    include
  • SVG 在 Firefox 中渲染得很糟糕

    我正在制作带有滑动轮播的信息图表 li 我认为 尽管 FF 中 SVG 的错误已得到解决 但 SVG 在 Firefox 中显示为像素化 有人能看到这个问题的解决办法吗 URL http weaver wp weavertest com r
  • 克隆存储库而不将其设为原始远程存储库

    我正在从一台将被擦除的计算机上克隆一个 git 存储库 是否可以在不创建原始存储库的情况下克隆存储库origin master 或者我是否需要克隆它 然后删除远程分支 这是通过git remote rm origin Edit 存储库只有一
  • 如何使用 rspec 测试 ActionCable 和 Devise?

    在我的 Rails 5 1 应用程序中 我使用设备进行身份验证和 ActionCable 我的 ActionCable 连接如下所示 module ApplicationCable class Connection lt ActionCab
  • ImportError:在 Google 应用引擎中找不到 django.utils

    当我在 google app engine 项目中使用 django utils 中的 simplejson 时 出现此错误 Traceback most recent call last File base python27 runtim
  • 使用 Outlook 365 API 在组织中获取电子邮件的最佳方式

    我正在构建一个应用程序 用于从组织内部的电子邮件收集统计信息 我们假设这些组织使用 Outlook 365 我希望能够以最简单的方式执行以下操作 获取阅读组织中所有邮件的权限 获取电子邮件 附件并运行我的统计数据 Outlook 365 似
  • vim 退出时恢复 shell

    我刚刚在我的新计算机上安装了 Arch 但我不知道需要向 vimrc 添加什么命令 以便它在退出时恢复 shell 内容 在调用 vim 之前 也就是说 我希望我的 shell 看起来像这样 whoami root who root tty
  • 使用 Linq to Entities 查询创建 null ienumerable

    我正在开发一个使用实体框架的 ASP NET MVC 项目 我需要将从数据库中提取的值投影到PropertyValue类型 如下所示 public class PropertyValue public string StringValue
  • 将所有工作簿工作表复制到新工作簿 VBA

    我正在使用此代码将工作簿中的每张工作表复制到新工作簿中 它工作正常 但它颠倒了工作表的顺序 是否有办法阻止它这样做 Sub copy copies all the sheets of the open workbook to a new o
  • Java 数组操作

    我有一个名为 resize 的函数 它接受源数组 并将大小调整为新的宽度和高度 我认为我正在使用的方法效率低下 我听说有更好的方法可以做到这一点 无论如何 当scale是一个int时 下面的代码有效 然而 还有第二个函数称为 half 它使