将 javax.swing.ImageIcon 对象转换为 org.pdfclown.documents.contents.entities.Image
casting an javax.swing.ImageIcon object to org.pdfclown.documents.contents.entities.Image
我正在尝试将 javax.swing.ImageIcon
转换为 org.pdfclown.documents.contents.entities.Image
,以便我可以显示 PDF Clown 从我的 Swing 应用程序创建的 PDF 文件中的图像。
我需要一个 ImageIcon,因为源图像需要可序列化,以便我可以将我的图像存储为序列化文件,作为更大、更复杂的数据模型的一部分。
当我查看 API for PDF Clown 时,我注意到 Image
接受 3 个输入;
String
路径。 - 无法工作,因为 ImageIcon
没有路径。
File
。 - 无法工作,因为磁盘上不存在 ImageIcon
。
IInputStream
流 Reference
这意味着唯一可行的方法是使用 IInputStream
。它是一个接口,因此构造具有该类型的对象的唯一方法是使用 FileInputStream
Reference. This accepts a native Java class of RandomAccessFile
Reference。这是另一个死胡同,因为它只接受 File
和 String
.
解决方案必须是将 ImageIcon
作为图像写入磁盘,然后再读回。我对此担心的是,我需要在输出之前使用路径来存储图像,用户不会限制访问。
我可以在不先写入磁盘的情况下执行此操作吗?
我创建这个 class 来执行转换;
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;
}
}
我正在尝试将 javax.swing.ImageIcon
转换为 org.pdfclown.documents.contents.entities.Image
,以便我可以显示 PDF Clown 从我的 Swing 应用程序创建的 PDF 文件中的图像。
我需要一个 ImageIcon,因为源图像需要可序列化,以便我可以将我的图像存储为序列化文件,作为更大、更复杂的数据模型的一部分。
当我查看 API for PDF Clown 时,我注意到 Image
接受 3 个输入;
String
路径。 - 无法工作,因为ImageIcon
没有路径。File
。 - 无法工作,因为磁盘上不存在ImageIcon
。IInputStream
流 Reference
这意味着唯一可行的方法是使用 IInputStream
。它是一个接口,因此构造具有该类型的对象的唯一方法是使用 FileInputStream
Reference. This accepts a native Java class of RandomAccessFile
Reference。这是另一个死胡同,因为它只接受 File
和 String
.
解决方案必须是将 ImageIcon
作为图像写入磁盘,然后再读回。我对此担心的是,我需要在输出之前使用路径来存储图像,用户不会限制访问。
我可以在不先写入磁盘的情况下执行此操作吗?
我创建这个 class 来执行转换;
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;
}
}