知识大全 高级图像处理图像I/O API RC 1.0
Posted 知
篇首语:那就是假话,所谓天才。勤奋的工作才是实在。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 高级图像处理图像I/O API RC 1.0相关的知识,希望对你有一定的参考价值。
高级图像处理图像I/O API RC 1.0 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
如果你对图像处理感兴趣 而且需要使用GIF JPEG和PNG以外的其它图像格式 或者希望改善JPEG图像处理的性能但不知道到哪里寻找适当的方法 或者需要通过几何运算(包括非线性变换)来处理图像 不必再为此苦恼了 答案就在这里——来自Sun公司的Java高级图像处理API和JAI图像I/O API RC JAI API是Java Media API的一部分 与之相伴的还包括Java D API Java D API Java Speech API和其他一些API Java高级图像处理API是作为Java规范请求(JSP) 的一部分而开发的 是对J SE version +版的扩展 主要用于处理图像 最初发布的版本是 JDC(Java Developer Connection)提供了一个预览版 beta (最新进展情况请查阅l文件 )与AWT和Java D相比 JAI API提供了更丰富的图像处理 包括对许多通用图像操作的内在支持 不过本文的目的不是讨论JAI API 而是伴随这些API但分离到它自己的可安装库中的一组图像读写器(codec)类 即Java高级图像处理图像I/O工具 RC 该RC提供了可以插接到J SE 的图像I/O框架上的一些功能 作为JSR 一部分而开发的图像I/O API提供了一个支持不同图像格式的可插拔框架 标准J SE 版本身支持GIF JPEG和PNG图像格式 而JAI图像I/O RC则提供了更多主流图像格式的编码解码器 只要加上针对操作平台的适当版本 以前开发的应用程序就可以处理这些新的图像格式 要理解JAI图像I/O工具的使用 需要首先了解图像I/O库 在安装和介绍图像I/O工具包之前 我们先看一看图像I/O库 图像I/O库 图像I/O库是J SE 的标准API 放在javax imageio包内 虽然这个包提供了两个接口和 个类 整个API实际上就是ImageIO类 通过这个类可以弄清读写所支持的图像格式并对这些图像进行读写 实际上这也就是整个API的全部内容 由于图像I/O库是一个可插拔的框架 所支持的图像格式集不是固定不变的 尽管随J SE 发布了一些标准格式 但任何人都可以增加新的支持格式 要查看有哪些格式可用 可以使用下面的代码 import javax imageio *;import java util Arrays; public class GetFormats public static void main(String args[]) String readFormats[] = ImageIO getReaderMIMETypes(); String writeFormats[] = ImageIO getWriterMIMETypes(); System out println( Readers: + Arrays asList(readFormats)); System out println( Writers: + Arrays asList(writeFormats)); 运行该程序 你会发现这个库支持读取GIF JPEG和PNG图像 也支持写JPEG和PNG图像 但是不支持写GIF文件 除了与像image/jpeg这样的MIME类型协同工作外 ImageIO类还允许通过getReaderFormatNames和getWriterFormatNames方法使用JPEG这样的非正式名称 此外 通过getImageReadersBySuffix和getImageWritersBySuffix还可以了解是否存在针对特定文件扩展名的reader/writer存在 利用ImageIO类 你所要做的事情不过是读javax imageio stream ImageInputStream java io InputStream java io File或者 URL 结果会得到一个java awt image BufferedImage 一旦拥有了BufferedImage 你就可以指定需要的格式名把图像写回去 (不仅仅是BufferImage 任何实现RenderedImage接口的类都可以写 )新的格式既可以与读取的格式相同 也可以是不同的格式以便进行格式转换 如果指定的格式没有可用的writer 那么write方法就返回false 否则如果找到了相应的writer就返回true String inputFilename = ;BufferedImage image = ImageIO read(inputFilename); String formatName = jpg ; // desired formatString outputFilename = ;File outputFile = new File(outputFilename);boolean writerExists = ImageIO write(image formatName outputFile); 为了说明图像I/O库的用法 下面的例子使用JFileChooser提示输入图像文件名 选中文件后再选择目标输出格式 然后按下 Save(保存) 按钮 保存完成后 将重新读取图像并在一个新窗口内显示 import java awt *; import java awt event *; import java awt image *; import javax swing *; import java io *; import *; import javax imageio *; public class Converting extends JFrame JLabel promptLabel; JTextField prompt; JButton promptButton; JFileChooser fileChooser; JComboBox boBox;? JButton saveButton;? public Converting() super( Image Conversion ); setDefaultCloseOperation(EXIT_ON_CLOSE); Container contentPane = getContentPane(); JPanel inputPanel = new JPanel(); promptLabel = new JLabel( Filename: ); inputPanel add(promptLabel); prompt = new JTextField( ); inputPanel add(prompt); promptButton = new JButton( Browse ); inputPanel add(promptButton); contentPane add(inputPanel BorderLayout NORTH); fileChooser = new JFileChooser(); promptButton addActionListener( new ActionListener() public void actionPerformed(ActionEvent e) int returnValue = fileChooser showOpenDialog(null); if (returnValue == JFileChooser APPROVE_OPTION) File selectedFile = fileChooser getSelectedFile(); if (selectedFile != null) prompt setText(selectedFile getAbsolutePath()); ); JPanel outputPanel = new JPanel(); String writerFormats[] = ImageIO getWriterFormatNames(); ComboBoxModel boBoxModel = new DefaultComboBoxModel(writerFormats); boBox = new JComboBox(boBoxModel); outputPanel add(boBox); saveButton = new JButton( Save ); outputPanel add(saveButton); saveButton addActionListener( new ActionListener() public void actionPerformed(ActionEvent e) try String name = prompt getText(); File file = new File(name); if (file exists()) BufferedImage image = ImageIO read(file toURL()); if (image == null) System err println( Invalid input file format ); else String selection = (String)boBox getSelectedItem(); String outputFilename = name + + selection; File outputFile = new File(outputFilename); boolean found = ImageIO write(image selection outputFile); if (found) JDialog window = new JDialog(); Container windowContent = window getContentPane(); BufferedImage newImage = ImageIO read(outputFile); JLabel label = new JLabel(new ImageIcon(newImage)); JScrollPane pane = new JScrollPane(label); windowContent add(pane BorderLayout CENTER); window setSize( ); window show(); else System err println( Error saving ); else System err println( Bad filename ); catch (MalformedURLException mur) System err println( Bad filename ); catch (IOException ioe) System err println( Error reading file ); ); contentPane add(outputPanel BorderLayout SOUTH); public static void main(String args[]) JFrame frame = new Converting(); frame pack(); frame show(); 注意 该程序没有硬编码任何文件类型 而是询问图像I/O框架支持哪些文件类型 安装Java高级图像处理图像I/O工具RC后 还可以重新运行该程序 你将会看到更多的存储格式 读取其它格式的图像基本上无需改变代码也能工作 用户只要选择不同的文件类型就可以了 cha138/Article/program/Java/hx/201311/26099相关参考
JavaI/OAPI之性能分析(上) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! IOAPI的
Java高级编程:使用打印服务API二(图) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 选择
按照操作执行所需的资源类型我们可以将操作分为cpu绑定型操作和I/O绑定型操作前者主要是利用cpu进行密集运算后者大部分操作处理时间花在I/O处理上(比如文件系统网络资源)对于I/O绑定型的操作我
测量磁盘I/O 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!我怎样分离OracleI/O来使得性能
Java网络编程从入门到精通(31):非阻塞I/O简介 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
分析JavaI/O的工作机制 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 网络I/O优化 网
调整JavaTMI/O性能 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 调整JavaTMI/O
Java网络编程从入门到精通(32):一个非阻塞I/O的例子 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看
减少ORACLE中的磁盘I/O 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 使用Muliple
I/O柜端子排拆线接线作业的危险点和控制措施如下:步骤或活动:I/O柜端子拆、接线危险点工具不合格或使用不当(伤害类型:触电)控制措施1、使用工具前应进行检查,不完整的工具不准使用。2、认真检查仪器仪