《Java数字图像处理:编程技巧与应用实践》——2.2 Java BufferedImageOp API

简介:

本节书摘来自华章计算机《Java数字图像处理:编程技巧与应用实践》一书中的第2章,第2.2节,作者 贾志刚,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.2 Java BufferedImageOp API

本节将介绍Java中最常用的操作图像像素的API接口BufferedImageOp,通过它,可以实现图像像素的调整,呈现出不同的图像显示效果,并且可编辑图像内容等。

2.2.1 Java BufferedImageOp 接口介绍

当前BufferedImageOp接口中最重要的方法是filter()方法,这是所有实现类必须完成的。目前BufferedImageOp有下面五个实现类。

  • AffineTransformOp :主要操作是提供各种旋转、错切、放缩功能。
  • ColorConvertOp :主要操作是提供像素灰度功能。
  • ConvolveOP: 主要用来实现图像卷积操作,可以实现模糊、边缘提取等效果。
  • LookupOp :主要用来实现图像像素颜色的各种变换、反色等操作。
  • RescaleOp: 主要用来实现图像对比度与亮度的调整操作。

对应的类关系图如图2-2所示。

screenshot

2.2.2 BufferedImage对象像素的读写方法

首先来看看如何读取一个像素的RGB值。读取一个像素点的RGB值的代码如下:

index = row * width + col;
ta = (pixels[index] >> 24) & 0xff;
tr = (pixels[index] >> 16) & 0xff;
tg = (pixels[index] >> 8) & 0xff;
tb = pixels[index] & 0xff;

其中index表示该像素点位置,row表示纵坐标位置,col表示横坐标位置。图像左上角的像素点对应位置坐标为(0,0),右下角的位置坐标为(height-1, width-1),这里的height又表示图像的高度,width表示图像的宽度。

设置一个像素点的RGB值的代码如下:

index = row * width + col;
pixels[index] = (ta << 24) | 
    (tr << 16) | (tg << 8) | tb;

其中ta表示透明度的值、tr表示RED通道值、tg表示GREEN通道值、tb表示BLUE通道值,它们的取值范围为[0~255]。

当创建的BufferedImage对象为ARGB类型,使用ImageIO保存为JPG格式时,你可能会发现图像与在Swing UI中显示的不一样,色差很大,原因在于ARGB类型与JPG格式不是很兼容,选择ARGB时最好保存为PNG格式,而RGB格式保存为JPG格式。

2.2.3 常见问题举例

当笔者初次接触Java Image API时,在学习过程中遇到了各种各样的问题。下面整理总结一下初学者经常遇到的问题。

1)图像格式支持。很多人会用Java Image API来读取tiff文件,可惜这种格式并不被支持,在JDK6中,Java ImageIO类只支持几种常见的图像格式(PNG、JPG、GIF、BMP),其他均不支持。

2)透明通道的支持与文件保存。如果BufferedImage对象为ARGB格式,说明支持透明通道,最佳的保存格式为PNG格式,否则会造成图像信息丢失,保存失真。

3)加载图像资源文件。很多人不知道如何加载图像资源文件,笔者最喜欢的做法是把要使用的图像文件与Class文件放在同一个package中,然后通过如下代码加载:

java.net.URL imageURL = this.getClass().
                           getResource("lena.jpg");
BufferedImage bi = ImageIO.read(imageURL);

4)处理结果显示的像素里有大片的白点或黑白斑点,最可能的原因在于你的RGB像素值取值范围超过了[0~255],请仔细检查。

5)如何在BufferedImage对象上绘制各种几何形状与文字等信息?使用如下代码即可:

Graphics2D g2 = image.createGraphics();     // 获取绘制引擎
g2.draw(...);                 //绘制几何形状Shape

6)如何获取图像的位深度?通常位深度(bit depth)与图像存储像素字节位数有关系。

深度为16位通常的存储格式为RGB,前两个通道red与green各占5位,最后一个blue通道占6位,总计16位两个字节,深度为24位通常的存储格式为RGB,分别占8位,总计三个字节,深度为32位通常包含透明通道,且为ARGB格式,每个通道占1个字节,总共32位,4个字节。

相关文章
|
10天前
|
自然语言处理 搜索推荐 数据挖掘
淘宝商品描述 API 接口的开发、应用与收益
淘宝商品描述API接口的开发与应用涵盖注册成为开发者、了解API规范、选择开发工具及语言(如Python)和实现代码调用。该接口可用于优化电商平台商品展示、同步数据、竞品分析、智能客服及个性化推荐,从而提高销售转化率、降低运营成本并拓展业务机会。通过自动化处理和数据分析,企业能更精准地满足消费者需求,提升竞争力。
48 9
|
9天前
|
供应链 搜索推荐 API
深度解析1688 API对电商的影响与实战应用
在全球电子商务迅猛发展的背景下,1688作为知名的B2B电商平台,为中小企业提供商品批发、分销、供应链管理等一站式服务,并通过开放的API接口,为开发者和电商企业提供数据资源和功能支持。本文将深入解析1688 API的功能(如商品搜索、详情、订单管理等)、应用场景(如商品展示、搜索优化、交易管理和用户行为分析)、收益分析(如流量增长、销售提升、库存优化和成本降低)及实际案例,帮助电商从业者提升运营效率和商业收益。
79 17
|
1天前
|
Java 应用服务中间件 API
【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析
本文介绍了 Spring Boot 的核心概念和使用场景,并通过一个实战项目演示了如何构建一个简单的 RESTful API。
19 5
|
1天前
|
人工智能 自然语言处理 搜索推荐
【潜意识Java】了解并详细分析Java与AIGC的结合应用和使用方式
本文介绍了如何将Java与AIGC(人工智能生成内容)技术结合,实现智能文本生成。
19 5
|
1天前
|
Java 编译器 开发者
Java中的this关键字详解:深入理解与应用
本文深入解析了Java中`this`关键字的多种用法
26 9
|
1天前
|
SQL Java 数据库连接
【潜意识Java】深入理解MyBatis,从基础到高级的深度细节应用
本文详细介绍了MyBatis,一个轻量级的Java持久化框架。内容涵盖MyBatis的基本概念、配置与环境搭建、基础操作(如创建实体类、Mapper接口及映射文件)以及CRUD操作的实现。此外,还深入探讨了高级特性,包括动态SQL和缓存机制。通过代码示例,帮助开发者更好地掌握MyBatis的使用技巧,提升数据库操作效率。总结部分强调了MyBatis的优势及其在实际开发中的应用价值。
10 1
|
3天前
|
XML API 开发者
探究获取亚马逊畅销榜API接口及实战应用
亚马逊MWS(商城网络服务)提供了一系列API接口,帮助开发者获取平台数据,其中畅销榜API尤为关键。通过注册开发者账号、创建应用并申请权限,可使用HTTP POST请求获取商品的销售排名、价格等信息。Python代码示例展示了如何构建和发送请求,并处理返回的XML或JSON数据。注意遵守亚马逊的频率限制、数据准确性和合规性要求,以确保安全合法地利用这些数据支持电商业务决策。
15 1
|
4天前
|
JSON 监控 API
获取1688商品SKU信息API接口及实战应用
在电商蓬勃发展的今天,数据成为宝贵的财富。1688作为国内知名批发采购平台,提供商品SKU信息API接口,可获取库存、价格、规格等关键数据,助力电商运营、市场分析和价格监控。本文介绍如何注册1688开放平台账号、创建应用并获取AppKey/AppSecret,申请API权限,使用Python实现接口调用,处理响应数据,并注意请求频率限制和错误处理。通过该接口,可为电商运营和数据分析提供有力支持。
21 2
|
10天前
|
Kubernetes Java 持续交付
小团队 CI/CD 实践:无需运维,Java Web应用的自动化部署
本文介绍如何使用GitHub Actions和阿里云Kubernetes(ACK)实现Java Web应用的自动化部署。通过CI/CD流程,开发人员无需手动处理复杂的运维任务,从而提高效率并减少错误。文中详细讲解了Docker与Kubernetes的概念,并演示了从创建Kubernetes集群、配置容器镜像服务到设置GitHub仓库Secrets及编写GitHub Actions工作流的具体步骤。最终实现了代码提交后自动构建、推送镜像并部署到Kubernetes集群的功能。整个过程不仅简化了部署流程,还确保了应用在不同环境中的稳定运行。
48 9
|
18天前
|
存储 缓存 API
API接口详解及其在电子商务中的应用研究
通过这些内容的详细介绍和实际案例分析,希望能帮助您深入理解API接口及其在电子商务中的应用,提高系统的互操作性和用户体验。
58 14

热门文章

最新文章