知识大全 高级图像处理图像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

相关参考

知识大全 Java I/O API之性能分析 (上)

JavaI/OAPI之性能分析(上)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  IOAPI的

知识大全 Java高级编程:使用打印服务API二(图)

Java高级编程:使用打印服务API二(图)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  选择

知识大全 wcf多线程和异步操作

  按照操作执行所需的资源类型我们可以将操作分为cpu绑定型操作和I/O绑定型操作前者主要是利用cpu进行密集运算后者大部分操作处理时间花在I/O处理上(比如文件系统网络资源)对于I/O绑定型的操作我

知识大全 测量磁盘I/O

测量磁盘I/O  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!我怎样分离OracleI/O来使得性能

知识大全 非阻塞I/O简介

Java网络编程从入门到精通(31):非阻塞I/O简介  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 分析 Java I/O 的工作机制

分析JavaI/O的工作机制  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  网络I/O优化  网

知识大全 调整 JavaTM I/O 性能

调整JavaTMI/O性能  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  调整JavaTMI/O

知识大全 一个非阻塞I/O的例子

Java网络编程从入门到精通(32):一个非阻塞I/O的例子  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 减少ORACLE中的磁盘I/O

减少ORACLE中的磁盘I/O  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  使用Muliple

I/O柜端子排拆线接线作业的危险点和控制措施

I/O柜端子排拆线接线作业的危险点和控制措施如下:步骤或活动:I/O柜端子拆、接线危险点工具不合格或使用不当(伤害类型:触电)控制措施1、使用工具前应进行检查,不完整的工具不准使用。2、认真检查仪器仪