Java图像处理实战指南

要执行这些 Java AWT 图像处理程序,你需要将它们分别保存为独立的 .java 文件,并使用 javac 编译,然后使用 java 运行。以下是每个程序的核心执行步骤、依赖关系和要点。

通用执行步骤

  1. 保存文件 :将每个 listing 的代码复制到文本编辑器中,并保存为对应的类名 .java 文件。
  2. 编译 :在命令行中,导航到文件所在目录,执行 javac 文件名.java
  3. 运行 :编译成功后,执行 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。演示了 CropImageFilterFilteredImageSource 的用法。
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 文件放在同一目录下,并按以下步骤操作:

  1. 保存所有文件:将 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)
  2. 编译主类:由于存在依赖关系,直接编译主类即可,Java 编译器会自动编译所需的类。

    bash 复制代码
    javac ImageFilterDemo.java

    此命令会编译 ImageFilterDemo 以及它引用的所有其他类(PlugInFilter, LoadedImage, Grayscale, Invert, Contrast, Convolver, Blur, Sharpen)。

  3. 运行程序

    bash java ImageFilterDemo

    程序运行后,会显示一个窗口,中央是加载的 Lilies.jpg 图片。窗口下方有一排按钮,点击"Grayscale"、"Invert"等可以应用对应的滤镜效果,点击"Reset"恢复原图。

注意事项

  • 图像文件SimpleImageLoadHistoGrabTileImageImageFilterDemo 都需要在程序运行的当前目录下存在一个名为 Lilies.jpg 的图像文件才能正常工作,否则会报错退出。
  • AWT 程序:这些是基于 AWT 的旧式 GUI 程序。在现代 Java 环境(如 Java 8+)中可以正常运行,界面风格为操作系统原生样式。
  • 窗口关闭 :所有程序均通过 addWindowListener 监听窗口关闭事件并调用 System.exit(0) 来退出应用程序。
  • 图像处理库 :这些示例演示了 Java AWT 原生的图像处理能力,包括 ImageIO读取、PixelGrabberImageFilterMemoryImageSource 等核心类的使用。 对于更复杂的图像处理,可以考虑使用 Java Advanced Imaging (JAI) 或 OpenCV 等库。

参考来源

相关推荐
铃木之影1 小时前
Java 版本 RAG 示例(Spring AI + Milvus)
java·人工智能·spring
小马过河R1 小时前
AI Coding应用上线安全实践指南
人工智能·安全·安全架构·engineering·ai coding·harness
@Mr_LiuYang1 小时前
《深入理解 AI Agent:设计原理与工程实践 》实验2-1 本地大模型服务部署与工具调用
人工智能·大模型·本地化部署·深入理解ai agent
Zkaisen1 小时前
第三章 · 大语言模型基础(详尽展开版)
人工智能·语言模型·自然语言处理
todoitbo1 小时前
MongoDB迁移:从烟囱式部署走向 KES-AI 时代融合数据库架构
人工智能·mongodb·数据库架构·国产数据库·kingbasees
意图共鸣1 小时前
意图共鸣科技8月6日正式发布《交互等效原理》——大模型下半场的工程哲学纲领
人工智能
nuoxin1141 小时前
BL-M8812CU3 无线 WiFi 模块-富利威
人工智能·嵌入式硬件·fpga开发·硬件工程·dsp开发
想会飞的蒲公英1 小时前
PyTorch 学习率实战:从零理解衰减策略与调度器
人工智能·pytorch·python·深度学习·机器学习
cxr8282 小时前
第四章 查询与推理能力
人工智能·架构·知识图谱·智能体