implement iImage_L; # javal v1.5 generated file: edit with care include "jni.m"; jni : JNI; ClassModule, JString, JArray, JArrayI, JArrayC, JArrayB, JArrayS, JArrayJ, JArrayF, JArrayD, JArrayZ, JArrayJObject, JArrayJClass, JArrayJString, JClass, JThread, JObject : import jni; #>> extra pre includes here ## %W% - %E%# #<< include "iImage_L.m"; #>> extra post includes here draw : Draw; #include "image2enc.m";# image2enc : Image2enc; include "imagefile.m"; readimg : RImagefile; imageremap : Imageremap; include "bufio.m"; B :Bufio; #<< init( jni_p : JNI ){ # save java native inteface mod instance jni = jni_p; #>>extra initialization here #<<} getImage_V( this : ref iImage_obj){#>> # Open a file descriptor from which we can read a picture. # file : string; fd : ref Sys->FD; if ( this.file != nil ) { file = this.file.str; fd = jni->sys->open(file, Sys->OREAD); if ( fd == nil ) jni->ThrowException("java/io/IOException", jni->sys->sprint("%r")); } else if ( this.url != nil ) { # Try to open a network connection # file = some component of the URL return; # later. } else return; B = load Bufio Bufio->PATH; if ( B == nil ) return; iobuf := B->fopen(fd, Bufio->OREAD); if ( (imagetype := guesstype(file)) == nil ) return; imgarr : array of byte; (this.width, this.height, imgarr) = convert_img(iobuf, imagetype); this.imgbytes = jni->MkAByte(imgarr);}#<< ## Guess the file type from the suffix#guesstype(name : string) : string{ imagetype : string; (nil, suffix) := jni->str->splitr(name, "."); case suffix { "gif" => imagetype = "IMAGE/GIF"; "pic" => imagetype = "IMAGE/PICT"; "jpg" or "jpeg" => imagetype = "IMAGE/JPEG"; "bit" or "mask" => imagetype = "IMAGE/X-INFERNO-BIT"; "xbm" or "xbmp" => imagetype = "IMAGE/X-XBITMAP"; } return imagetype;} ## Convert the image into the Inferno bit format# Return image height, width and the image(array of bytes)# Uses readgif.b/readjpg.b/readxbitmap.b/readpic.b and image2enc.b #convert_img(fd : ref Bufio->Iobuf, imagetype: string): (int, int, array of byte){ # Initialization case imagetype { "IMAGE/GIF" => readimg = load RImagefile RImagefile->READGIFPATH; "IMAGE/JPEG" => readimg = load RImagefile RImagefile->READJPGPATH; "IMAGE/X-XBITMAP" => readimg = load RImagefile RImagefile->READXBMPATH; "IMAGE/X-PICT" => readimg = load RImagefile RImagefile->READPICPATH; "IMAGE/X-INFERNO-BIT" => # What to do here? * => return(-1,-1,nil); } if ( readimg == nil ) return(-1,-1,nil); readimg->init(B); rawimg : ref RImagefile->Rawimage; # Read image [gif/jpg/xbm/pic] err_readimg: string; (rawimg, err_readimg) = readimg->read(fd); readimg = nil; # memory control # Error check if (err_readimg != "" ) { return(-1,-1,nil); } # Image2enc# image2enc = load Image2enc Image2enc->PATH;# if ( image2enc == nil )# return (-1, -1, nil);# (data, mask, err_enc) := image2enc->image2enc(rawimg, 1); # Error check# if (err_enc != "" ) {# return(-1,-1,nil);# } # Masking # if (mask != nil) {# newdata := array[len data + len mask] of byte;# newdata[0:] = data[0:];# newdata[len data:] = mask[0:];# data = newdata;# } # Make Inferno image imageremap = load Imageremap Imageremap->PATH; draw = load Draw Draw->PATH; Image, Context : import draw; if ( imageremap == nil || draw == nil ) return (-1, -1, nil); (img, err_remap) := imageremap->remap(rawimg, jni->getContext().display, 0); if ( img == nil ) return (-1, -1, nil); # Determine image size wd := (rawimg.r.max.x - rawimg.r.min.x); ht := (rawimg.r.max.y - rawimg.r.min.y); data := array[wd*ht] of byte; # what if depth != 3 ? img.readpixels(img.r, data); # Return width, height and image return(wd, ht, data);}
implement iImage_L;
# javal v1.5 generated file: edit with care
include "jni.m";
jni : JNI;
ClassModule,
JString,
JArray,
JArrayI,
JArrayC,
JArrayB,
JArrayS,
JArrayJ,
JArrayF,
JArrayD,
JArrayZ,
JArrayJObject,
JArrayJClass,
JArrayJString,
JClass,
JThread,
JObject : import jni;
#>> extra pre includes here
#
# %W% - %E%
#
#<<
include "iImage_L.m";
#>> extra post includes here
draw : Draw;
#include "image2enc.m";
# image2enc : Image2enc;
include "imagefile.m";
readimg : RImagefile;
imageremap : Imageremap;
include "bufio.m";
B :Bufio;
#<<
init( jni_p : JNI )
{
# save java native inteface mod instance
jni = jni_p;
#>>extra initialization here
#<<
}
getImage_V( this : ref iImage_obj)
{#>>
# Open a file descriptor from which we can read a picture.
#
file : string;
fd : ref Sys->FD;
if ( this.file != nil ) {
file = this.file.str;
fd = jni->sys->open(file, Sys->OREAD);
if ( fd == nil )
jni->ThrowException("java/io/IOException", jni->sys->sprint("%r"));
}
else if ( this.url != nil ) { # Try to open a network connection
# file = some component of the URL
return; # later.
}
else
return;
B = load Bufio Bufio->PATH;
if ( B == nil )
return;
iobuf := B->fopen(fd, Bufio->OREAD);
if ( (imagetype := guesstype(file)) == nil )
return;
imgarr : array of byte;
(this.width, this.height, imgarr) = convert_img(iobuf, imagetype);
this.imgbytes = jni->MkAByte(imgarr);
}#<<
#
# Guess the file type from the suffix
#
guesstype(name : string) : string
{
imagetype : string;
(nil, suffix) := jni->str->splitr(name, ".");
case suffix {
"gif" => imagetype = "IMAGE/GIF";
"pic" => imagetype = "IMAGE/PICT";
"jpg" or "jpeg" => imagetype = "IMAGE/JPEG";
"bit" or "mask" => imagetype = "IMAGE/X-INFERNO-BIT";
"xbm" or "xbmp" => imagetype = "IMAGE/X-XBITMAP";
}
return imagetype;
}
#
# Convert the image into the Inferno bit format
# Return image height, width and the image(array of bytes)
# Uses readgif.b/readjpg.b/readxbitmap.b/readpic.b and image2enc.b
#
convert_img(fd : ref Bufio->Iobuf, imagetype: string): (int, int, array of byte)
{
# Initialization
case imagetype {
"IMAGE/GIF" => readimg = load RImagefile RImagefile->READGIFPATH;
"IMAGE/JPEG" => readimg = load RImagefile RImagefile->READJPGPATH;
"IMAGE/X-XBITMAP" => readimg = load RImagefile RImagefile->READXBMPATH;
"IMAGE/X-PICT" => readimg = load RImagefile RImagefile->READPICPATH;
"IMAGE/X-INFERNO-BIT" => # What to do here?
* => return(-1,-1,nil);
}
if ( readimg == nil )
return(-1,-1,nil);
readimg->init(B);
rawimg : ref RImagefile->Rawimage;
# Read image [gif/jpg/xbm/pic]
err_readimg: string;
(rawimg, err_readimg) = readimg->read(fd);
readimg = nil; # memory control
# Error check
if (err_readimg != "" ) {
return(-1,-1,nil);
}
# Image2enc
# image2enc = load Image2enc Image2enc->PATH;
# if ( image2enc == nil )
# return (-1, -1, nil);
# (data, mask, err_enc) := image2enc->image2enc(rawimg, 1);
# Error check
# if (err_enc != "" ) {
# return(-1,-1,nil);
# }
# Masking
# if (mask != nil) {
# newdata := array[len data + len mask] of byte;
# newdata[0:] = data[0:];
# newdata[len data:] = mask[0:];
# data = newdata;
# }
# Make Inferno image
imageremap = load Imageremap Imageremap->PATH;
draw = load Draw Draw->PATH;
Image, Context : import draw;
if ( imageremap == nil || draw == nil )
return (-1, -1, nil);
(img, err_remap) := imageremap->remap(rawimg, jni->getContext().display, 0);
if ( img == nil )
return (-1, -1, nil);
# Determine image size
wd := (rawimg.r.max.x - rawimg.r.min.x);
ht := (rawimg.r.max.y - rawimg.r.min.y);
data := array[wd*ht] of byte; # what if depth != 3 ?
img.readpixels(img.r, data);
# Return width, height and image
return(wd, ht, data);
}