要执行这些 Java AWT 图像处理程序,你需要将它们分别保存为独立的 .java 文件,并使用 javac 编译,然后使用 java 运行。以下是每个程序的核心执行步骤、依赖关系和要点。
通用执行步骤
- 保存文件 :将每个
listing的代码复制到文本编辑器中,并保存为对应的类名.java文件。 - 编译 :在命令行中,导航到文件所在目录,执行
javac 文件名.java。 - 运行 :编译成功后,执行
java 类名。
各程序执行详情与依赖关系
| 程序文件 (Listing) | 类名 (Class Name) | 主要功能与运行效果描述 | 关键依赖与注意事项 |
|---|---|---|---|
| Listing 1 | SimpleImageLoad |
加载并显示一张名为 Lilies.jpg 的图片。窗口大小设置为 400x365。 |
必须 在程序同目录下放置一张名为 Lilies.jpg 的图片,否则程序会因 IOException 而退出。 |
| Listing 2 | DoubleBuffer |
演示双缓冲技术以消除闪烁。窗口绘制蓝色背景、红色网格线和一个黄色圆形。鼠标移动 时(flicker=true)会闪烁;鼠标拖拽 时(flicker=false)启用离屏缓冲,绘制平滑无闪烁。 |
无需外部图片。程序在 main 方法末尾创建了离屏图像缓冲区 (appwin.buffer = appwin.createImage(appwin.w, appwin.h))。 |
| Listing 3 | MemoryImageGenerator |
在内存中动态生成一张 512x512 像素的图像。图像颜色由算法 (x^y)&0xff 等生成,呈现彩色噪点或图案效果,并显示在窗口中。 |
无需外部图片。使用 MemoryImageSource 从像素数组创建图像。 |
| Listing 4 | HistoGrab |
加载 Lilies.jpg,使用 PixelGrabber 获取其所有像素数据,计算图像的灰度直方图,并在图像下方绘制该直方图。 |
必须 在程序同目录下放置 Lilies.jpg。核心是 PixelGrabber 类的使用和直方图计算与绘制。 |
| Listing 5 | TileImage |
加载 Lilies.jpg,使用 CropImageFilter 将其切割成 4x4 共16个小图块,然后随机打乱这些图块的位置,最后在窗口中重新拼接显示,形成"拼图"效果。 |
必须 在程序同目录下放置 Lilies.jpg。演示了 CropImageFilter 和 FilteredImageSource 的用法。 |
| Listing 6, 7, 8, 9, 10, 11, 12, 13, 14 | ImageFilterDemo (及多个支持类) |
这是一个综合的图像过滤器演示程序 。它加载 Lilies.jpg,并提供"重置"、"灰度化"、"反色"、"对比度"、"模糊"、"锐化"等按钮来应用不同的图像滤镜。 |
这是最复杂的一组程序,需要多个文件一起编译。 具体编译和运行方法见下文。 |
关键代码示例:编译与运行
对于独立程序(Listing 1-5),操作命令如下:
bash
# 1. 编译
javac SimpleImageLoad.java
# 2. 运行 (确保 Lilies.jpg 存在)
java SimpleImageLoad
综合图像过滤器程序 (Listing 6-14) 的编译与运行
这是一个多文件项目,ImageFilterDemo 是主类,它依赖于多个其他类。你需要将所有 .java 文件放在同一目录下,并按以下步骤操作:
-
保存所有文件:将 Listing 6 到 Listing 14 的代码分别保存为以下文件名:
ImageFilterDemo.java(Listing 6)PlugInFilter.java(Listing 7)LoadedImage.java(Listing 8)Grayscale.java(Listing 9)Invert.java(Listing 10)Contrast.java(Listing 11)Convolver.java(Listing 12)Blur.java(Listing 13)Sharpen.java(Listing 14)
-
编译主类:由于存在依赖关系,直接编译主类即可,Java 编译器会自动编译所需的类。
bashjavac ImageFilterDemo.java此命令会编译
ImageFilterDemo以及它引用的所有其他类(PlugInFilter,LoadedImage,Grayscale,Invert,Contrast,Convolver,Blur,Sharpen)。 -
运行程序 :
bash java ImageFilterDemo程序运行后,会显示一个窗口,中央是加载的
Lilies.jpg图片。窗口下方有一排按钮,点击"Grayscale"、"Invert"等可以应用对应的滤镜效果,点击"Reset"恢复原图。
注意事项
- 图像文件 :
SimpleImageLoad、HistoGrab、TileImage和ImageFilterDemo都需要在程序运行的当前目录下存在一个名为Lilies.jpg的图像文件才能正常工作,否则会报错退出。 - AWT 程序:这些是基于 AWT 的旧式 GUI 程序。在现代 Java 环境(如 Java 8+)中可以正常运行,界面风格为操作系统原生样式。
- 窗口关闭 :所有程序均通过
addWindowListener监听窗口关闭事件并调用System.exit(0)来退出应用程序。 - 图像处理库 :这些示例演示了 Java AWT 原生的图像处理能力,包括
ImageIO读取、PixelGrabber、ImageFilter、MemoryImageSource等核心类的使用。 对于更复杂的图像处理,可以考虑使用 Java Advanced Imaging (JAI) 或 OpenCV 等库。