-1

Swing アプリケーションから PDF Clown によって作成された PDF ファイルに画像を表示できるように、ajavax.swing.ImageIconを aにキャストしようとしています。org.pdfclown.documents.contents.entities.Image

ソース イメージをシリアライズ可能にする必要があるため、ImageIcon が必要です。これにより、より大規模で複雑なデータ モデルの一部としてイメージをシリアライズされたファイルとして保存できます。

PDF Clownの API を見ると、Image3 つの入力を受け入れることに気付きました。

  1. String道。-ImageIconパスがないため機能しません。
  2. File. -ImageIconディスク上に存在しないため動作しません。
  3. IInputStreamストリーム参照

これは、実行可能な唯一の方法は を使用することであることを意味しますIInputStream。これはインターフェースであるため、そのタイプの Object を構築する唯一の方法は、FileInputStream Referenceを使用することです。RandomAccessFile これは、 Referenceのネイティブ Java クラスを受け入れます。Fileこれは、 と のみを受け入れるため、もう 1 つの行き止まりStringです。

ImageIcon解決策は、イメージとしてディスクに書き込んでから読み戻すことです。これに関する私の懸念は、ユーザーがアクセスを制限されていない出力の前に、パスを使用して画像を保存する必要があることです。

最初にディスクに書き込まずにこれを行うことはできますか?

4

1 に答える 1

1

キャストを実行するためにこのクラスを作成しました。

public class ImageIconToBuffer {
    public static Buffer convert(ImageIcon img) {
        try {
            BufferedImage image = toBufferedImage(img);

            byte[] bytes = toByteArray(image);

            Buffer buffer = new Buffer(bytes);
            return buffer;
        } catch (IOException e) {
            return null;
        }
    }

    public static byte[] toByteArray(BufferedImage image) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();            
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(baos);
        encoder.encode(image);   

        return baos.toByteArray();
    }

    public static BufferedImage toBufferedImage(ImageIcon icon) {
        Image img = icon.getImage();
        BufferedImage bi = new BufferedImage(img.getWidth(null),img.getHeight(null),BufferedImage.TYPE_INT_RGB);

        Graphics2D bGr = bi.createGraphics();
        bGr.drawImage(img, 0, 0, null);
        bGr.dispose();

        return bi;
    }

}
于 2016-05-04T19:48:25.493 に答える