我过去下载了一个工具,它将图像文件作为输入并输出一个源文件,该文件扩展了Image
可用于图形的类。我现在有这个工具的实际应用程序,但我不再有副本。我已经搜索了很多次,希望在没有运气的情况下再次找到它。
我想知道如何在类中硬编码图像(没有外部图像加载)。我实际上会使用 achar[]
来存储所有字节,但是数组有一个图像经常超过的长度大小限制。
提前致谢。
一种可能的方法是将图像字节存储为String
类内部。例如,LWJGL 在LWJGLUtil
class中使用这种方式。ByteBuffer
他们使用以下函数将字符串转换为 a :
private static ByteBuffer loadIcon(String data) {
int len = data.length();
ByteBuffer bb = BufferUtils.createByteBuffer(len);
for(int i=0 ; i<len ; i++) {
bb.put(i, (byte)data.charAt(i));
}
return bb.asReadOnlyBuffer();
}
在哪里BufferUtils.createByteBuffer
声明为
public static ByteBuffer createByteBuffer(int size) {
return ByteBuffer.allocateDirect(size).order(ByteOrder.nativeOrder());
}
您可以对数据进行 base64 编码。
Apache commons 编解码器提供 base64 编码器和解码器。然后您可以使用在线工具将您的图像编码为 base64。只需在包含编码器输出的文本的 java 文件中编写一个文字字符串。
要访问图像,首先将 Base64 字符串解码为字节数组。
然后你可以创建你的图像:
ImageIO.read(new ByteArrayInputStream(base64bytes))
您的长度大小限制本质上也无关紧要,因为 java 数组的大小限制是整数类型,超过 20 亿或 2 GB。