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 等库。

参考来源

相关推荐
Ai-_Man几秒前
千问能否电脑批量导出?深度拆解「AI导出鸭」如何让这件事从“反人性”变成“优雅”
人工智能·ai·小程序
深圳市益普科技有限公司3 分钟前
半导体智造升级大势所趋!深圳益普科技:以自研工业软件,助力制造业国产化转型
人工智能
Zzz 小生13 分钟前
Lazy Theta*:把昂贵的视线检测留到“真正需要”时再做
人工智能·算法·贪心算法·推荐算法
阿图灵15 分钟前
OpenCV 绘图五件套:画圆、文本、线段、矩形与椭圆
图像处理·人工智能·python·opencv·计算机视觉·绘图
水如烟17 分钟前
孤能子视角:EIS下的宏观、微观时空,以及光速常数与虚空背景
人工智能
slacker-kian23 分钟前
HuggingFace API加载模型超时:用 ModelScopeAPI 替代
人工智能·python·transformer·huggingface·blip·modelscope·blipprocessor
mmsx25 分钟前
用正则把数百个文件抽成知识图谱:三版迭代,从“能用“到“可移植“
人工智能·知识图谱
罗西的思考37 分钟前
【OpenClaw具身硬件】ZeroClaw 源码阅读笔记(1)— 总体
人工智能·笔记·深度学习·机器学习
cuguanren43 分钟前
Agent 框架的会话记忆管理机制
人工智能·ai·大模型·llm·agent·上下文管理·会话记忆管理
高工智能汽车1 小时前
从“借船”到“造船”,汽车芯片出海迎历史性一跃
人工智能·汽车