2010-12-08 6 views
2

BufferedImage#getTypeメソッドに関する質問があります。java.awt.image.BufferedImage#getTypeが異なる値を返す理由Mac&CENTOS

Javaのバージョン "1.6.0_03" のJava(TM)SE:ファイルシステムからPNG画像を参照する場合、次のコードは、このJVMとCentOSのボックスで、私のMacでとを印刷しますランタイム環境(1.6.0_03-B05を構築) は、Java HotSpot(TM)64ビットサーバーVM(1.6.0_03-B05、混合モードを構築する)

import java.awt.*; 
import java.awt.geom.AffineTransform; 
import java.awt.image.BufferedImage; 
import javax.imageio.ImageIO; 
import java.io.*; 

public class ImageTypeTest { 

    public static void main(String[] args) throws Exception{ 
     BufferedImage sourceImage = ImageIO.read(new File("/path/to/png.png")); 
     System.out.println(sourceImage.getType()); 
    } 

} 

誰が何であるかに関して、いくつかの光を当てるてくださいすることができ私はそれを回避することができるようにこの違いを引き起こす?このコードは、GIF画像など、他の画像タイプと同じ値を返します。必要ImageIOでの契約では何もないとして、彼らはに許可されている -

は、違いの理由は、OS XとのCentOSのJava実装はPNG画像を解析するために別の基礎となるライブラリを使用することである

+1

これは完全に正常です。あなたは* "それを回避する" *とは何を意味しますか?必要なタイプの独自のBufferedImageをインスタンス化し、そのBufferedImageで読み取ったイメージをコピーできます。 AFAIKでは、ImageIO.readに必要なBufferedImageタイプを直接作成させることはできません。また、独自のBufferedImageタイプを強制すると、ターゲットとしているさまざまなプラットフォームで画像を操作したときに最適でないパフォーマンスが得られる可能性があることにも注意してください。 – SyntaxT3rr0r

+0

こんにちはWebinator、私はそれが正常であることを理解しています。質問は、原因は何ですか?異なるオペレーティングシステムで同じイメージに対して異なるイメージタイプを取得するのはなぜですか?それは私が理解していないものです。なぜなら、それがまったく同じイメージファイルであれば、どうして違うのでしょうか?お返事をありがとうございます。 – Ytsejammer

答えて

2

ありがとうそれは特定の画像タイプを生成する。

GraphicsConfiguration config = new JFrame().getGraphicsConfiguration(); 
// Or better, use your main GUI component instead of new JFrame() 
BufferedImage fixedImg = config.createCompatibleImage(img.getWidth(), img.getHeight(), Transparency.TRANSLUCENT); 
Graphics2D fig = fixedImg.createGraphics(); 
fig.drawImage(img, 0, 0, null); 
fig.dispose(); 
fixedImg.flush(); 
:あなたは一貫し(と高速描画する)イメージを持っているしたい場合は

は、行うための最善のことは、ディスプレイ・システムで使用されている色空間に画像を変換するには、次のコードを使用することです

+0

ちょっとZarkonnnen。私は本当にあなたの答えに感謝します。私のコードは「ヘッドレス」サーバー環境で実行されるため、ImageIO.read()で読み取られた別のイメージのGraphicsConfigurationを使用して終了しました。sourceImage.createGraphics()。getDeviceConfiguration();再度、感謝します – Ytsejammer

関連する問題