Re: is that possible to include a small PNG file as part of Java class?
In article <lo9mla$gkm$1@dont-email.me>, Eric Sosman (esosman@comcast-
dot-net.invalid) says...
On 6/23/2014 12:02 PM, www wrote:
Hi:
I have a simple Java class: Abc.java. The method within it needs to access a small PNG file(it's an icon picture). Right now, this picture file("abc.png") is located at nonsrc/icons/abc.png
So this class is a bit pain. Abc.class won't work in the absence of abc.png. When I create an executable JAR, this is pain: always need to remember to include abc.png file inside it.
I am wondering if there is a way that I can "convert" abc.png into some sort of Java code and I can put it in Abc.java. So Abc.class alone can perform the job, without the need of presence of abc.png. Is that possible?
Hope I have explained my intention well.
Martin Gregorie's response seems to be good advice. However, if
you simply *must* incorporate your PNG image as a class, you could do
so with a big byte[] array:
private static final byte[] PNG_BUFFER = {
(byte)0x89, 0x50, 0x4E, 0x47, ... };
public static Image getMyPNG() {
return ImageIO.read(new ByteArrayInputStream(PNG_BUFFER));
}
However, this approach will only work for fairly small images. The
problem is that Java class files have no way to store an initialized
array: The byte[] array above actually compiles to the equivalent of
private static final byte[] PNG_BUFFER = new byte[whatever];
static {
PNG_BUFFER[0] = (byte)0x89;
PNG_BUFFER[1] = 0x50;
PNG_BUFFER[2] = 0x4E;
PNG_BUFFER[3] = 0x47;
...
}
... with about four or so bytecode instructions per array element.
Just wondering: why not use a string?
private static final String imageAsBase64
= "SOME_BASE64_STRING_GOES_HERE";
public static Image getMyPNG() {
return ImageIO.read(
new ByteArrayInputStream(
SomeUtil.base64ToBytes(imageAsBase64)));
}
Of course Base64 is notoriously inefficient (there's still Base85
though), but he's talking about "small PNG files", not large ones.
One might also like to read this here:
http://www.javaworld.com/article/2077481/learn-java/java-tip-117--
transfer-binary-data-in-an-xml-document.html
Kind regards,
Wanja
--
...Alesi's problem was that the back of the car was jumping up and down
dangerously - and I can assure you from having been teammate to
Jean Alesi and knowing what kind of cars that he can pull up with,
when Jean Alesi says that a car is dangerous - it is. [Jonathan Palmer]
--- news://freenews.netfront.net/ - complaints: news@netfront.net ---