gpt4 book ai didi

java - RenderedImage 到 BufferedImage 用于多页 tiff 读取

转载 作者:搜寻专家 更新时间:2023-11-01 01:05:28 25 4
gpt4 key购买 nike

我正在使用 JAI 加载多页 TIFF 图像

File file = workArea[0];
SeekableStream s = new FileSeekableStream(file);

TIFFDecodeParam param = null;

ImageDecoder dec = ImageCodec.createImageDecoder("tiff", s, param);

//first page
RenderedImage op1 =
new NullOpImage(dec.decodeAsRenderedImage(0),
null,
OpImage.OP_IO_BOUND,
null);

BufferedImage pg1 = new BufferedImage(op1.getWidth(), op1.getHeight(),
BufferedImage.TYPE_INT_RGB);
pg1.getGraphics().drawImage((Image) op1, 0, 0, null);

然而,在最后一行我得到一个运行时错误:

 Exception in thread "main" java.lang.ClassCastException: 
javax.media.jai.MullOpImage cannot be cast to java.awt.Image

我在尝试设置 BufferedImage 后清除了 RenderedImage,因此如果有另一种方法可以做到这一点,我并不完全“需要”RenderedImage。

我尝试过:

 pg1.setData(op1.getData());

并给出 ArrayIndexOutOfBoundsException。我不确定为什么 op1 设置的 pg1 的宽度和高度完全一样,但可能有一个非常正当的理由。

最佳答案

我在 http://www.jguru.com/faq/view.jsp?EID=114602 找到了解决方案

第一个不起作用,但是 convertRenderedImage 函数起作用了。

public BufferedImage convertRenderedImage(RenderedImage img) {
if (img instanceof BufferedImage) {
return (BufferedImage)img;
}
ColorModel cm = img.getColorModel();
int width = img.getWidth();
int height = img.getHeight();
WritableRaster raster = cm.createCompatibleWritableRaster(width, height);
boolean isAlphaPremultiplied = cm.isAlphaPremultiplied();
Hashtable properties = new Hashtable();
String[] keys = img.getPropertyNames();
if (keys!=null) {
for (int i = 0; i < keys.length; i++) {
properties.put(keys[i], img.getProperty(keys[i]));
}
}
BufferedImage result = new BufferedImage(cm, raster, isAlphaPremultiplied, properties);
img.copyData(raster);
return result;
}

关于java - RenderedImage 到 BufferedImage 用于多页 tiff 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7044521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com