java的缓冲图像用红色面具创建 [英] java buffered image created with red mask
本文介绍了java的缓冲图像用红色面具创建的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有麻烦读取图像。如果我做了以下
I am having trouble reading an image. If I do the following
URL url = new URL("http://tctechcrunch2011.files.wordpress.com/2012/10/gmm.jpg");
ImageInputStream stream = ImageIO.createImageInputStream(url.openStream());
ImageReader reader = ImageIO.getImageReaders(stream).next();
reader.setInput(stream, true, true);
BufferedImage image = reader.read(0);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ImageWriter writer = ImageIO.getImageWritersByFormatName("JPEG").next();
ImageOutputStream ios = ImageIO.createImageOutputStream(bos);
writer.setOutput(ios);
IIOImage ioImage = new IIOImage(image, null, null);
writer.write(ioImage);
ios.close();
FileOutputStream fos = new FileOutputStream("badimage.jpeg");
fos.write(bos.toByteArray());
fos.close();
的
图像写入用红色色调。有一些需要设置为正确读取这一形象的选择吗?
the image is written with a red tint. Is there some option that needs to be set to read this image correctly?
推荐答案
可能与 ImageIO.read
的问题无法正确读取一些JPG图片。下面是一个类似 错误(错误号:4881314),这可能仍然是尚未解决的部分。
The problem maybe related to ImageIO.read
that fails to correctly read some JPG images. Here is a similar bug (Bug ID: 4881314) that may still be partially unresolved.
作为一种替代方法,你可以尝试使用 Toolkit.createImage
,似乎正确处理指定的图像。例如:
As an alternative you can try using Toolkit.createImage
that seems to handle the specified image correctly. For example:
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
class TestImage {
public static void main(String args[]) {
try {
URL imageUrl = new URL(
"http://tctechcrunch2011.files.wordpress.com/2012/10/gmm.jpg");
BufferedImage ioImage = ImageIO.read(imageUrl);
Image toolkitImage = Toolkit.getDefaultToolkit().createImage(
imageUrl);
JPanel panel = new JPanel();
panel.add(new JLabel(new ImageIcon(ioImage)));
panel.add(new JLabel(new ImageIcon(toolkitImage)));
JOptionPane.showMessageDialog(null, panel, "ImageIO vs Toolkit",
JOptionPane.INFORMATION_MESSAGE);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e.getMessage(), "Failure",
JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
}
}
}
下面是结果:
这篇关于java的缓冲图像用红色面具创建的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文