Added load methods to read from a stream and URL
This commit is contained in:
parent
3e59db54ab
commit
4010309a94
|
@ -31,6 +31,10 @@
|
||||||
*/
|
*/
|
||||||
package org.lwjgl.devil;
|
package org.lwjgl.devil;
|
||||||
|
|
||||||
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.net.URL;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.IntBuffer;
|
import java.nio.IntBuffer;
|
||||||
|
|
||||||
|
@ -45,7 +49,7 @@ import org.lwjgl.LWJGLException;
|
||||||
* @version $Revision$
|
* @version $Revision$
|
||||||
*/
|
*/
|
||||||
public class IL {
|
public class IL {
|
||||||
|
private static final int BUFFER_LENGTH = 1000;
|
||||||
/** Have we been created? */
|
/** Have we been created? */
|
||||||
protected static boolean created;
|
protected static boolean created;
|
||||||
|
|
||||||
|
@ -62,11 +66,11 @@ public class IL {
|
||||||
public static final int IL_LUMINANCE = 0x1909;
|
public static final int IL_LUMINANCE = 0x1909;
|
||||||
|
|
||||||
public static final int IL_BYTE = 0x1400;
|
public static final int IL_BYTE = 0x1400;
|
||||||
public static final int IL_UNSIGNED_BYTE = 0x1401;
|
// public static final int IL_UNSIGNED_BYTE = 0x1401;
|
||||||
public static final int IL_SHORT = 0x1402;
|
public static final int IL_SHORT = 0x1402;
|
||||||
public static final int IL_UNSIGNED_SHORT = 0x1403;
|
// public static final int IL_UNSIGNED_SHORT = 0x1403;
|
||||||
public static final int IL_INT = 0x1404;
|
public static final int IL_INT = 0x1404;
|
||||||
public static final int IL_UNSIGNED_INT = 0x1405;
|
// public static final int IL_UNSIGNED_INT = 0x1405;
|
||||||
public static final int IL_FLOAT = 0x1406;
|
public static final int IL_FLOAT = 0x1406;
|
||||||
public static final int IL_DOUBLE = 0x140A;
|
public static final int IL_DOUBLE = 0x140A;
|
||||||
|
|
||||||
|
@ -374,6 +378,123 @@ public class IL {
|
||||||
//ilLoadF() uses a Windows file handle so will not be implemented
|
//ilLoadF() uses a Windows file handle so will not be implemented
|
||||||
// public static native boolean ilLoadF(int Type, ILHANDLE File);
|
// public static native boolean ilLoadF(int Type, ILHANDLE File);
|
||||||
public static native boolean ilLoadImage(String fileName);
|
public static native boolean ilLoadImage(String fileName);
|
||||||
|
public static boolean ilLoadFromURL(URL url) {
|
||||||
|
boolean result = false;
|
||||||
|
int type = IL_TYPE_UNKNOWN;
|
||||||
|
|
||||||
|
String file = url.toString();
|
||||||
|
int index = file.lastIndexOf('.');
|
||||||
|
if(index != -1) {
|
||||||
|
String extension = file.substring(index + 1);
|
||||||
|
if(extension.equalsIgnoreCase("bmp")) {
|
||||||
|
type = IL_BMP;
|
||||||
|
}
|
||||||
|
else if(extension.equalsIgnoreCase("cut")) {
|
||||||
|
type = IL_CUT;
|
||||||
|
}
|
||||||
|
else if(extension.equalsIgnoreCase("gif")) {
|
||||||
|
type = IL_GIF;
|
||||||
|
}
|
||||||
|
else if(extension.equalsIgnoreCase("ico")) {
|
||||||
|
type = IL_ICO;
|
||||||
|
}
|
||||||
|
else if(extension.equalsIgnoreCase("jpg")) {
|
||||||
|
type = IL_JPG;
|
||||||
|
}
|
||||||
|
else if(extension.equalsIgnoreCase("lif")) {
|
||||||
|
type = IL_LIF;
|
||||||
|
}
|
||||||
|
else if(extension.equalsIgnoreCase("mng")) {
|
||||||
|
type = IL_MNG;
|
||||||
|
}
|
||||||
|
else if(extension.equalsIgnoreCase("pcd")) {
|
||||||
|
type = IL_PCD;
|
||||||
|
}
|
||||||
|
else if(extension.equalsIgnoreCase("pcx")) {
|
||||||
|
type = IL_PCX;
|
||||||
|
}
|
||||||
|
else if(extension.equalsIgnoreCase("pic")) {
|
||||||
|
type = IL_PIC;
|
||||||
|
}
|
||||||
|
else if(extension.equalsIgnoreCase("png")) {
|
||||||
|
type = IL_PNG;
|
||||||
|
}
|
||||||
|
else if(extension.equalsIgnoreCase("pbm") ||
|
||||||
|
extension.equalsIgnoreCase("pgm") ||
|
||||||
|
extension.equalsIgnoreCase("ppm")) {
|
||||||
|
type = IL_PNM;
|
||||||
|
}
|
||||||
|
else if(extension.equalsIgnoreCase("psd")) {
|
||||||
|
type = IL_PSD;
|
||||||
|
}
|
||||||
|
else if(extension.equalsIgnoreCase("psp")) {
|
||||||
|
type = IL_PSP;
|
||||||
|
}
|
||||||
|
else if(extension.equalsIgnoreCase("bw") ||
|
||||||
|
extension.equalsIgnoreCase("rgb") ||
|
||||||
|
extension.equalsIgnoreCase("rgba") ||
|
||||||
|
extension.equalsIgnoreCase("sgi")) {
|
||||||
|
type = IL_SGI;
|
||||||
|
}
|
||||||
|
else if(extension.equalsIgnoreCase("tga")) {
|
||||||
|
type = IL_TGA;
|
||||||
|
}
|
||||||
|
else if(extension.equalsIgnoreCase("tif") ||
|
||||||
|
extension.equalsIgnoreCase("tiff")) {
|
||||||
|
type = IL_TIF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
result = ilLoadFromStream(url.openStream(), type);
|
||||||
|
}
|
||||||
|
catch(IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
public static boolean ilLoadFromStream(InputStream stream, int type) {
|
||||||
|
boolean result = false;
|
||||||
|
int bufferLength = BUFFER_LENGTH;
|
||||||
|
int lastRead = 0;
|
||||||
|
byte read[] = new byte[bufferLength];
|
||||||
|
byte block[] = new byte[0];
|
||||||
|
|
||||||
|
BufferedInputStream buf = new BufferedInputStream(stream);
|
||||||
|
try {
|
||||||
|
do {
|
||||||
|
lastRead = buf.read(read);
|
||||||
|
if(lastRead != -1) {
|
||||||
|
block = appendByteArray(block, read, lastRead);
|
||||||
|
}
|
||||||
|
} while(lastRead != -1);
|
||||||
|
ByteBuffer lump = ByteBuffer.allocateDirect(block.length);
|
||||||
|
lump.put(block);
|
||||||
|
lump.flip();
|
||||||
|
result = ilLoadL(type, lump, block.length);
|
||||||
|
}
|
||||||
|
catch(IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
private static byte[] appendByteArray(byte oldArray[], byte copyArray[], int length) {
|
||||||
|
int oldLength = oldArray.length;
|
||||||
|
byte newArray[] = new byte[oldLength + length];
|
||||||
|
|
||||||
|
for(int i=0;i<oldLength;i++) {
|
||||||
|
newArray[i] = oldArray[i];
|
||||||
|
}
|
||||||
|
for(int i=0;i<length;i++) {
|
||||||
|
newArray[i + oldLength] = copyArray[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
return newArray;
|
||||||
|
}
|
||||||
public static boolean ilLoadL(int Type, ByteBuffer Lump, int Size) {
|
public static boolean ilLoadL(int Type, ByteBuffer Lump, int Size) {
|
||||||
BufferChecks.checkDirect(Lump);
|
BufferChecks.checkDirect(Lump);
|
||||||
return nilLoadL(Type, Lump, Lump.position(), Size);
|
return nilLoadL(Type, Lump, Lump.position(), Size);
|
||||||
|
|
Loading…
Reference in New Issue