将javax.swing.ImageIcon对象强制转换为org.pdfclown.documents.contents.entities.Image
我正试图将将javax.swing.ImageIcon对象强制转换为org.pdfclown.documents.contents.entities.Image,java,image,swing,pdf,pdfclown,Java,Image,Swing,Pdf,Pdfclown,我正试图将javax.swing.ImageIcon转换为org.pdfclown.documents.contents.entities.Image,这样我就可以在我的swing应用程序中由PDF小丑创建的PDF文件中显示图像 我需要一个ImageIcon,因为源图像需要可序列化,以便我可以将图像作为序列化文件存储为更大、更复杂的数据模型的一部分 当我查看图像时,我注意到图像接受3个输入 字符串路径。-无法工作,因为ImageIcon没有路径 文件-无法工作,因为磁盘上不存在ImageIcon
javax.swing.ImageIcon
转换为org.pdfclown.documents.contents.entities.Image
,这样我就可以在我的swing应用程序中由PDF小丑创建的PDF文件中显示图像
我需要一个ImageIcon,因为源图像需要可序列化,以便我可以将图像作为序列化文件存储为更大、更复杂的数据模型的一部分
当我查看图像时,我注意到图像
接受3个输入
字符串
路径。-无法工作,因为ImageIcon
没有路径文件
-无法工作,因为磁盘上不存在ImageIcon
IInputStream
streamIInputStream
。它是一个接口,因此构造该类型对象的唯一方法是使用FileInputStream
。它接受本机Java类RandomAccessFile
。这是另一个死胡同,因为它只接受文件
和字符串
然后,解决方案必须是将图像图标
作为图像写入磁盘,然后将其读回。我关心的是,我需要使用一个路径来存储输出前的图像,用户将不会限制访问
我可以在不先写入磁盘的情况下执行此操作吗?我创建了这个类来执行强制转换
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;
}
}
我不熟悉那个API,但它看起来像是
Buffer
实现了IInputStream
,并接受了更灵活的构造函数参数。