2016-03-19 8 views
0

Javaでは、.jpeg、.gif以外のファイルのBufferedImageを取得する方法はありません、.bmp、または.png?具体的には、BufferedImage .jpgを作成したいと考えています。私が知っている唯一の方法はImageIO.readです。ファイルがこれらのタイプのものでない場合はnullを返します。 BufferedImageを作成する他の方法はありますか? は、現在、私のコードは次のようになります。.jpeg、.gif、.bmp、または.png以外のファイルのBufferedImageを取得する方法

private void sendImage(BufferedImage image){ 

    try{ 
     if(output == null){ 

      showMessage("MAKE SURE THAT YOU ARE CONNECTED TO SOMEONE!\n"); 

     } 

     else{ 

      if(image == null)System.out.println("image is null in sendImage"); 

      output.writeObject("CODE - 4"); 
      output.flush(); 
      System.out.println("here"); 
      output.writeObject(image); 
      System.out.println("done"); 
      output.flush(); 
      System.out.println("Just sent code " + 4); 

     } 

    }catch(IOException ioException){ 

     System.out.println("\nERROR! UNABLE TO SEND IMAGE CODE!"); 
     ioException.printStackTrace(); 

    } 

とスタックトレースは次のようになります。

java.io.NotSerializableException: java.awt.image.BufferedImage 
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1183) 
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347) 
    at server.Server.sendImage(Server.java:432) 
    at server.Server.access$300(Server.java:32) 
    at server.Server$2.actionPerformed(Server.java:95) 
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
    at java.awt.Component.processMouseEvent(Component.java:6516) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 
    at java.awt.Component.processEvent(Component.java:6281) 
    at java.awt.Container.processEvent(Container.java:2229) 
    at java.awt.Component.dispatchEventImpl(Component.java:4872) 
    at java.awt.Container.dispatchEventImpl(Container.java:2287) 
    at java.awt.Component.dispatchEvent(Component.java:4698) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
    at java.awt.Container.dispatchEventImpl(Container.java:2273) 
    at java.awt.Window.dispatchEventImpl(Window.java:2719) 
    at java.awt.Component.dispatchEvent(Component.java:4698) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:747) 
    at java.awt.EventQueue.access$300(EventQueue.java:103) 
    at java.awt.EventQueue$3.run(EventQueue.java:706) 
    at java.awt.EventQueue$3.run(EventQueue.java:704) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
    at java.awt.EventQueue$4.run(EventQueue.java:720) 
    at java.awt.EventQueue$4.run(EventQueue.java:718) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:717) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 

そして、はい、「ここで」プログラムの出力はその後、上記のスタックトレースでクラッシュ。別の形式で取得することができない場合は、任意の形式の画像(およびSUPER BONUS POINTSの場合も、シリアライズ可能な形式)からの代替方法があります。

+0

どのフォーマットで作業していますか? – Typo

+0

少なくとも私はそのリストに.pdfと.jpgを追加するのが好きです。 – dsiegler19

+0

よくPDFはイメージではありません。 – pczeus

答えて

1

Javaで画像の最も一般的なリーダ/ライタは、以下のとおりです。

  • javax.imageioで、あなたは12モンキーズプロジェクトのjarファイルを追加する場合は特に。
  • Java Advanced Imagingですが、時にはメモリリークが発生しているようです。
  • BioFormatは、すべての顕微鏡フォーマットに特化していますが、通常のものにも対応しています。

imageioとJAIの両方で、jpgイメージを読み書きできます。

0

このようなストリームに直接画像を書きたいとは思わないでしょう。何が欲しいのは、このように、ImageIO.writeです:

import javax.imageio.ImageIO; 
. 
. 
. 
. 
ImageIO.write(image, "png", output); 

上記のコードは、PNGなど、あなたのバッファリングされたイメージを書き出します。 jpegが必要な場合は、これがうまくいくはずです:

ImageIO.write(image, "jpg", output); 
関連する問題