Java ART

17 Mar 2025 | 6 分钟阅读

在日常对话中,“艺术”通常指装裱好的画;在这种语境下,有些人认为艺术只属于知识分子或文艺青年。然而,艺术是为所有人准备的,任何想要体验它的人都可以接触,而且它常常比我们意识到的存在于更多的地方。可能是我们喜欢的歌曲,我们看的电影,剧院里的诗歌,甚至是奶奶做的被子;这些以及更多都属于艺术。

艺术已经存在了数千年,并且随着时代的变迁,它以多种不同的方式演变。

创作艺术的原因因人而异,取决于许多因素。定义艺术是相当棘手的,并且在历史上一直存在争议;没有一个被普遍接受的定义。然而,许多人认为艺术是任何能触动我们情感的事物。

因此,三个人可能会体验同一件艺术品,并产生截然不同的反应。

一个人可能认为这是他们见过的最美丽的东西。另一个人可能讨厌它,第三个人可能没什么感觉,而他们 none of them 都是错的。

每个人都有权表达自己的偏好和感受。说到艺术,我们喜欢自己喜欢的歌曲的方式,可能与别人喜欢他们著名的雕塑的方式相同,即使我们可能不喜欢。考虑一下那个人为什么如此喜欢它可能会很有价值,我们可能会从他们身上学到一些东西,也可能从我们自己身上学到一些东西。

“艺术”一词多年来一直被用作一个标签。许多人试图对艺术进行分类,而这与艺术本身无关。它关乎我们与它的个人体验以及我们从中获得的意义。每个人对艺术的反应都不同,并且有成长的潜力。它使我们能够以很少其他事物能做到的方式讲述故事、记录历史并触及我们的情感。

我们也可以用 2D 图形来绘制字符串。

用字符串绘制 2D 图形

借助 Graphics2D 类,可以将字符串绘制成图像。这通过调用 drawString() 方法来实现。

Graphics2D 是一个抽象类,我们可以通过扩展它并实现与 Graphics 类相关的各种方法来创建实例。

我们知道这是一项繁琐的任务,通常是通过在 Java 中创建一个 BufferedImage 实例来完成,然后从中检索底层的 Graphics 实例。

通过用 ASCII 字符替换图像矩阵索引

当我们绘制字符串时,Graphics2D 类使用一种小的类似矩阵的技术,其中区域显示设计的字符串并被赋予特定值,而其他区域提供零值。

要替换雕刻区域,提供所需的 ASCII 字符,我们需要将雕刻区域的值作为一个数据点进行检查,而不考虑红、绿、蓝的颜色值。

当需要将 RGB 颜色表示为整数时,我们将图像类型设置为整数模式。

主要思想是用我们想要的艺术字符替换图像矩阵非零索引处的值。

矩阵索引表示分配给单个空格字符的零值。零值在等效整数模式下为 -16777216。

ASCII 中的艺术生成器

让我们考虑一个必须制作字符串“JAVA”的 ASCII 艺术的场景。

首先,我们需要创建一个具有所需宽度和高度的空白图像,并将图像类型设置为整数模式,如上所述。

在使用 Java 中的高级 2D 图形时,我们将 Graphics 对象转换为 Graphics2D 实例。完成所有这些之后,在调用带有字符串“JAVA”的 drawString() 方法之前,我们设置所需的参数。

上面的代码中,13 和 26 分别代表打印应开始的图像点处的 x 和 y 坐标。

我们还拥有一个 2D 图形和一个底层矩阵,其中包含两种被区分的值:非零索引和零索引。

现在,我们将进入二维数组或矩阵,并将所有值替换为 ASCII 字符“*”,用冒号(:)代替。

让我们编写一个程序来实现上述讨论的模式。

输出

ART in Java

上面的程序输出会显示为星号(*)块。如果我们想用整数值 -1664578 替换“*”,其余的都用“:”(冒号)表示。在这种情况下,我们编写一个程序来替换“星号”为一个整数值。

程序

在输出中,我们获得了与字符串对应的 ASCII 艺术和一个反转的雕刻。

什么是 ASCII?

ASCII 是“American Standard Code for Information Interchange”(美国信息交换标准代码)的缩写。它们是字母数字字符,由七位组成。共有 128 个字符;问题是它们只用于表示某些字符。

我们为什么要绘制 ASCII 艺术?

ASCII 艺术具有复杂的图案,而逼真的图形需要大量的技巧。它可以专注于算法。

开发策略

有一些关于管理复杂性的建议。

  1. 设计一个程序,考虑步骤或方法。我们必须用英语描述所需的步骤,并使用这些描述来决定方法。
  2. 接下来是创建一个字符模式表,就像我们使用表格来编写“for”循环一样。

伪代码

这是算法的英文描述。

例如,绘制 12 宽、7 高的星号框。

伪代码算法

线

( #, 16=, #)

上半部分

  1. |
  2. 空格(递减)
  3. <>
  4. 点(递增)
  5. <>
  6. 空格(与上面相同)
  7. |

下半部分(上半部分倒置)

线

#, 16=,

来自伪代码的方法

输出

ART in Java

缩放镜像

让我们修改我们的镜像程序,使其能够缩放。当前的镜像左边是 4,右边是 3。

我们想通过只在一个地方更改代码来构建代码以缩放图形。

ART in Java

变量的局限性

想法:创建一个变量来表示大小。因此,在方法中使用变量的值。

问题:一个方法中的变量在其他方法中不可见。

范围

变量存在于程序的一部分。从声明到 {} 大括号结束

在“for”循环中声明的变量仅在该循环中存在。

在方法中声明的变量仅在该方法中存在。

作用域的影响

没有重叠作用域的变量可以具有相同的名称。

变量不能被声明两次或在其作用域外使用。

类常量

一个固定值对整个程序可见,并且只能在声明时设置,不能重新赋值。

语法

名称通常是 ALL_UPPER_CASE

ART in Java

示例

public static final int DAYS_IN_WEEK = 7;

public static final double INTEREST_RATE = 3.5;

public static final int SSN = 658234569;

结论

本文介绍了如何使用内置的 2D 图形库在 Java 中创建 ASCII 艺术。我们还展示了通过将星号替换为整数来显示字符串。