【问题标题】:Load an image "on the fly" in RAM, without using the hard disk在 RAM 中“即时”加载图像,而不使用硬盘
【发布时间】:2016-06-21 20:49:48
【问题描述】:


可以从 Internet 获取文本(甚至解码字符串)并在 JLabel 中表示它,而无需接触硬盘。
所以,我想知道是否可以对图像做同样的事情。让我解释一下自己:
我想在 JLabel 中“动态地”用十六进制表示来表示图像,我的意思是,在 RAM 中,甚至不接触硬盘。我的意思不是从互联网上下载它,我的意思是读取具有图像十六进制代码的文件,将其转换为 ASCII 并以编程方式将其插入 JLabel,就像它是一个文件一样。
这甚至可能吗?我想我不是很清楚,但我希望你明白我想说什么。

【问题讨论】:

  • 如果你已经有一个十六进制字符串,为什么还需要先将其写入磁盘,然后再放入JLabel

标签: java ram


【解决方案1】:

是的,你可以。如果您从 Internet 加载图像,javax.swing.ImageIcon 构造函数接受 URL 作为参数,然后您将 ImageIcon 提供给 JLabel

根据您的说明,是的,您仍然可以这样做。

有几个选项,这里有几个:

  1. 您仍然可以使用上述相同的方法,并使用 "file://your/image/file" 作为ImageIcon 的 URL。

  2. ImageIcon 也接受 byte[] 的图像数据。因此,您可以将常规文件读入ByteArrayInputStream 并从中获取byte[]

【讨论】:

  • 已更新,误会深表歉意。
  • 尝试了您的更新,但我得到了这张图片:gyazo.com/dadb0bfab3426b65f2e04ddeda41c23f 我的代码:pastebin.com/riYtEypV
  • 您的 img.dat 文件有多大?你确定它只包含 1 行吗?因为您的代码只读取文件的第一行。你有原始的 img.jpg 文件吗?可以直接读取jpg图片文件吗?
  • 我的 img.dat 文件很大(纯文本 (HEX),140kb)。当然它只包含 1 行。我确实有原始的 img.jpg,我可以成功加载它。代码更新:pastebin.com/J8zHLqtV
  • 好的,我发现问题出在我的 img.dat 文件上,它已损坏。对不起,让你浪费了你的时间。最后一个问题,视频和音频可以做到这一点吗?
猜你喜欢
  • 2016-11-02
  • 2014-01-28
  • 2015-07-27
  • 2022-07-26
  • 2012-08-22
  • 1970-01-01
  • 2015-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多