如何在Java中转换Image
为BufferedImage
?
请注意,现有答案显然是不正确的,因为它使用方法getWidth(null)
和getHeight(null)
,-1
如果尚未加载图像(Image
根据定义,它是一个异步对象),则可以返回。
请提供更正确的答案,或提供更多证明现有答案已经正确的证据。
如果这对您很重要,则可以使用MediaTracker
“等待”来加载图像,然后就不必担心提供ImageObserver
try {
MediaTracker mt = new MediaTracker(new JPanel());
Image image = Toolkit.getDefaultToolkit().createImage("...");
mt.addImage(image, 0);
System.out.println("Wait for...");
mt.waitForAll();
System.out.println("I be loaded");
BufferedImage bi = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = bi.createGraphics();
g2d.drawImage(image, 0, 0, null);
g2d.dispose();
} catch (InterruptedException ex) {
ex.printStackTrace();
}
看看MediaTracker
JavaDocs了解更多详细信息
我不想添加任何GUI,我只需要下载图像或失败
好吧,如果您“需要下载”该图像,则可以使用ImageIO.read(URL)
,请参阅阅读/加载图像以获取更多详细信息…然后,您无需关心Image
或MediaTracker
,因为ImageIO
返回的是BufferedImage
问题内容: 可能是重复的,但我面临将图像转换成用于发送的问题。我已经尝试过此代码,但是它给了我错误的编码字符串。 输出: [B @ 677327b6 但我将同一张图像转换为许多在线编码器,它们都给出了正确的大Base64字符串。 编辑: 如何重复?我的重复的链接没有给我解决方案转换字符串我想要的。 我在这里想念什么? 问题答案: 问题是您要返回的调用将返回一个字节数组。因此,最后得到的是字节数组的
问题内容: 在Java SE中将原始字节数组转换为Image的正确方法是什么。数组由字节组成,其中每个三个字节代表一个像素,每个字节对应相应的RGB分量。 有人可以建议一个代码示例吗? 谢谢,迈克 问题答案: 假设您知道图像的高度和宽度。 大致。假设像素数据被编码为一组行;并且颜色的长度为3 宽度高度(应该是有效的)。
问题内容: 我正在开发通过与服务器进行通讯的移动应用。这是我第一次使用PHP。我设法将数据上传到数据库中。现在,我需要发送图像以将其存储在ftp服务器中。为此,我转换并从我的应用程序发送。 服务器端 我得到了十六进制代码,但不确定如何将其转换为图像并存储在ftp服务器中。我在这里真的很挣扎。我用谷歌搜索,但找不到确切的一个。 任何帮助深表感谢。 问题答案: 将十六进制字符串转换为二进制: 等价于,
问题内容: 我有一个图像通过JSON字符串发送给我。我想将该字符串转换为我的Android应用程序中的图像,然后显示该图像。 JSON字符串如下所示: 注意:我用…截断了字符串。 我有一个函数(我认为)可以将字符串转换为图像。我这样做对吗? 然后我尝试像这样在我的android活动上显示它 但是,当我这样做时,什么也没有显示。我在logcat中没有任何错误。我究竟做错了什么? 谢谢 问题答案: 我
问题内容: 我试图将一个PIL 对象转换为缩略图,然后将我的缩略图函数返回的PIL 对象转换为一个对象。我怎样才能做到这一点? 问题答案: 无需写回文件系统,然后通过打开调用将文件带回内存的方法是利用StringIO和Django InMemoryUploadedFile。这是有关如何执行此操作的快速示例。假设您已经有一个名为“ thumb”的缩略图: 让我知道是否需要进一步说明。我现在正在我的项
问题内容: 我是Java的新手,想知道double转换为int cast如何工作吗?我知道,只需将低32位转换为int就很容易了,但是将double(64位)转换为int(32位)呢?来自二进制的double中的那64位是Double- precision浮点格式(Mantissa),那么它如何在内部转换为int? 问题答案: 所有这些都记录在JLS的5.1.3节中。 第一步,将浮点数转换为lon