《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个字节。

相关文章
|
11天前
|
JSON 搜索推荐 API
Lazada Item_review API接口的开发应用与收益
Lazada作为东南亚领先的电商平台,通过其丰富的API接口为第三方开发者提供了强大的工具。其中,Lazada商品评论列表API(item_review API)尤为重要,能够实时获取商品评论数据,帮助开发者了解用户反馈、优化商品策略、提高购物体验和建立品牌形象,从而在电商行业中实现显著的收益。本文将深入探讨该API的开发应用及其多方面的价值。
45 14
|
13天前
|
供应链 搜索推荐 安全
唯品会Vip商品详情 API 接口:开发应用与收益深度剖析
唯品会Vip商品详情API接口,作为电商数据交互的枢纽,提供详尽的商品信息与动态数据,助力开发者、商家及市场分析者洞察市场趋势、优化商品推荐、提升用户体验,从而实现销售额增长、利润空间拓展及用户忠诚度加固,推动电商行业创新发展。
54 16
|
11天前
|
搜索推荐 数据挖掘 API
Suning商品详情API接口的开发应用与收益
在电商迅猛发展的时代,API接口技术成为连接不同系统的桥梁,为电商平台提供高效的数据交换能力。苏宁易购的商品详情API接口,为商家和开发者带来诸多便利和收益,包括商品信息获取、选品上架、竞品分析、个性化推荐、自动化管理和运营效率提升等方面,助力商家优化销售策略,提高用户体验,降低运营成本,增强市场竞争力,促进业务创新。
38 2
|
15天前
|
Kubernetes 安全 Devops
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
39 10
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
|
6天前
|
存储 搜索推荐 安全
介绍几个常用的电商API接口及其应用场景。(一篇文章全清楚)
电商API接口是电商平台高效运营的核心技术支撑,涵盖商品管理、订单管理、支付、客户管理、营销推广和数据分析六大模块。商品管理API实现商品信息的精准上传与动态调整;订单管理API确保订单全流程透明可控;支付API保障交易安全便捷;客户管理API通过数据分析提供个性化服务;营销推广API助力精准营销;数据分析API为决策提供数据支持。各API协同工作,推动电商行业创新发展,构建智能便捷的电商生态。
57 12
|
3天前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
3天前
|
安全 算法 Java
Java CAS原理和应用场景大揭秘:你掌握了吗?
CAS(Compare and Swap)是一种乐观锁机制,通过硬件指令实现原子操作,确保多线程环境下对共享变量的安全访问。它避免了传统互斥锁的性能开销和线程阻塞问题。CAS操作包含三个步骤:获取期望值、比较当前值与期望值是否相等、若相等则更新为新值。CAS广泛应用于高并发场景,如数据库事务、分布式锁、无锁数据结构等,但需注意ABA问题。Java中常用`java.util.concurrent.atomic`包下的类支持CAS操作。
21 2
|
7天前
|
监控 供应链 搜索推荐
阿里妈妈商品详情API接口:开发、应用与收益的深度剖析
阿里妈妈是阿里巴巴旗下的数字营销平台,其商品详情API接口为开发者提供了获取淘宝、天猫等电商平台商品详细信息的工具。本文介绍了该接口的开发流程、应用场景及带来的收益,揭示了其在电商生态中的重要地位。
54 6
|
7天前
|
供应链 搜索推荐 API
1688APP原数据API接口的开发、应用与收益(一篇文章全明白)
1688作为全球知名的B2B电商平台,通过开放的原数据API接口,为开发者提供了丰富的数据资源,涵盖商品信息、交易数据、店铺信息、物流信息和用户信息等。本文将深入探讨1688 APP原数据API接口的开发、应用及其带来的商业收益,包括提升流量、优化库存管理、增强用户体验等方面。
42 6
|
7天前
|
机器学习/深度学习 人工智能 监控
API超越应用的时代,深入了解F5 API安全解决方案
API超越应用的时代,深入了解F5 API安全解决方案
20 3