180 lines · 4.1 KB · Brainfuck
RawDownload
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);}