Changeset 1807


Ignore:
Timestamp:
11/17/06 10:01:55 (13 years ago)
Author:
melissa
Message:

Updated importer to use openBytes instead of openImage.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/plugins/Importer.java

    r1800 r1807  
    364364          sizeT = end[i]; 
    365365          // CTR: huh? this makes no sense 
     366          /* 
    366367          if (channels > 1) { 
    367368            channels = r.getIndex(id, 0, 1, 0) - r.getIndex(id, 0, 0, 0); 
    368369          } 
     370          */ 
    369371        } 
    370372 
     
    379381          } 
    380382          IJ.showProgress((double) q++ / total); 
    381           BufferedImage img = r.openImage(id, j); 
    382  
    383           int sizeX = r.getSizeX(id), sizeY = r.getSizeY(id); 
    384           if (img.getWidth() < sizeX || img.getHeight() < sizeY) { 
    385             img = ImageTools.padImage(img, sizeX, sizeY); 
    386           } 
    387  
    388           // autoscale >8-bit data to that RGB merge looks reasonable 
    389 //          int cCoord = r.getZCTCoords(id, j)[1]; 
    390 //          Double min = r.getChannelGlobalMinimum(id, cCoord); 
    391 //          Double max = r.getChannelGlobalMaximum(id, cCoord); 
    392           Double min = null, max = null; 
    393           if (!doRGBMerge && r.isRGB(id) && 
    394             r.getPixelType(id) >= FormatReader.INT16) 
    395           { 
    396             if (min == null || max == null) { 
    397               // call ImageJ's RGB merge utility after we display 
    398               doRGBMerge = true; 
    399             } 
    400             else { 
    401               // we can autoscale on our own 
    402               img = ImageTools.autoscale(img, min.intValue(), max.intValue()); 
    403             } 
    404           } 
    405  
    406           // extract bytes from buffered image 
     383           
     384          byte[] b = r.openBytes(id, j); 
     385 
     386          int w = r.getSizeX(id); 
     387          int h = r.getSizeY(id); 
     388          int c = r.isRGB(id) ? r.getSizeC(id) : 1; 
     389          int type = r.getPixelType(id); 
     390 
     391          // TODO : pad the byte array to the appropriate size 
     392 
     393 
     394          // construct image processor and add to stack 
     395 
    407396          ImageProcessor ip = null; 
    408           WritableRaster raster = img.getRaster(); 
    409           int c = raster.getNumBands(); 
    410           int tt = raster.getTransferType(); 
    411           int w = img.getWidth(), h = img.getHeight(); 
     397    
     398          int bpp = 0; 
     399          switch (type) { 
     400            case FormatReader.INT8: 
     401            case FormatReader.UINT8: bpp = 1; break; 
     402            case FormatReader.INT16: 
     403            case FormatReader.UINT16: bpp = 2; break; 
     404            case FormatReader.INT32: 
     405            case FormatReader.UINT32: 
     406            case FormatReader.FLOAT: bpp = 4; break; 
     407            case FormatReader.DOUBLE: bpp = 8; break; 
     408          } 
     409    
     410          Object pixels = DataTools.makeDataArray(b, bpp,  
     411            type == FormatReader.FLOAT || type == FormatReader.DOUBLE,  
     412            r.isLittleEndian(id)); 
    412413 
    413414          if (c == 1) { 
    414             if (tt == DataBuffer.TYPE_BYTE) { 
    415               byte[] b = ImageTools.getBytes(img)[0]; 
    416               if (b.length > w*h) { 
    417                 byte[] tmp = b; 
    418                 b = new byte[w*h]; 
    419                 System.arraycopy(tmp, 0, b, 0, b.length); 
     415            if (pixels instanceof byte[]) { 
     416              byte[] bytes = (byte[]) pixels; 
     417              if (bytes.length > w*h) { 
     418                byte[] tmp = bytes; 
     419                bytes = new byte[w*h]; 
     420                System.arraycopy(tmp, 0, bytes, 0, bytes.length); 
    420421              } 
    421               ip = new ByteProcessor(w, h, b, null); 
     422              ip = new ByteProcessor(w, h, bytes, null); 
    422423              if (stackB == null) stackB = new ImageStack(w, h); 
    423424              stackB.addSlice(imageName + ":" + (j + 1), ip); 
    424425            } 
    425             else if (tt == DataBuffer.TYPE_USHORT) { 
    426               short[] s = ImageTools.getShorts(img)[0]; 
     426            else if (pixels instanceof short[]) { 
     427              short[] s = (short[]) pixels; 
    427428              if (s.length > w*h) { 
    428429                short[] tmp = s; 
     
    434435              stackS.addSlice(imageName + ":" + (j + 1), ip); 
    435436            } 
    436             else if (tt == DataBuffer.TYPE_FLOAT) { 
    437               float[] f = ImageTools.getFloats(img)[0]; 
     437            else if (pixels instanceof int[]) { 
     438              int[] ints = (int[]) pixels; 
     439              if (ints.length > w*h) { 
     440                int[] tmp = ints; 
     441                ints = new int[w*h]; 
     442                System.arraycopy(tmp, 0, ints, 0, ints.length); 
     443              } 
     444              ip = new FloatProcessor(w, h, ints); 
     445              if (stackF == null) stackF = new ImageStack(w, h); 
     446              stackF.addSlice(imageName + ":" + (j + 1), ip); 
     447            } 
     448            else if (pixels instanceof float[]) { 
     449              float[] f = (float[]) pixels; 
     450              f = DataTools.normalizeFloats(f); 
    438451              if (f.length > w*h) { 
    439452                float[] tmp = f; 
     
    456469              else stackF.addSlice(imageName + ":" + (j + 1), ip); 
    457470            } 
     471            else if (pixels instanceof double[]) { 
     472              double[] d = (double[]) pixels; 
     473              if (d.length > w*h) { 
     474                double[] tmp = d; 
     475                d = new double[w*h]; 
     476                System.arraycopy(tmp, 0, d, 0, d.length); 
     477              } 
     478              ip = new FloatProcessor(w, h, d); 
     479              if (stackF == null) stackF = new ImageStack(w, h); 
     480              stackF.addSlice(imageName + ":" + (j + 1), ip); 
     481            } 
    458482          } 
    459483          if (ip == null) { 
    460             ip = new ImagePlus(null, img).getProcessor(); // slow 
     484            if (pixels instanceof float[]) { 
     485              pixels = (Object) DataTools.normalizeFloats((float[]) pixels); 
     486            } 
     487            ip = new ColorProcessor(w, h,  
     488              ImageTools.make24Bits(pixels, w, h, r.isInterleaved(id))); 
    461489            if (stackO == null) stackO = new ImageStack(w, h); 
    462490            stackO.addSlice(imageName + ":" + (j + 1), ip); 
Note: See TracChangeset for help on using the changeset viewer.