Changeset 2951 for trunk


Ignore:
Timestamp:
07/10/07 09:16:30 (13 years ago)
Author:
melissa
Message:

Allow sources to be constructed with either a filename or a reader; fixed a few bugs in the ImageProcessor construction logic.

Location:
trunk/loci/formats/cache
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/formats/cache/BufferedImageSource.java

    r2948 r2951  
    33// 
    44 
    5 package loci.formats.cache; 
     5package loci.formats.cache.sources; 
    66 
    77import java.io.IOException; 
    88import loci.formats.*; 
     9import loci.formats.cache.*; 
    910 
    1011/** Retrieves BufferedImages from a file, using Bio-Formats. */ 
     
    2021    super(o);  
    2122    try { 
    22       reader = new FileStitcher(); 
    23       reader.setId(o.toString());  
     23      if (o instanceof IFormatReader) reader = (IFormatReader) o; 
     24      else { 
     25        reader = new FileStitcher(); 
     26        reader.setId(o.toString());  
     27      }  
    2428    } 
    2529    catch (FormatException exc) { throw new CacheException(exc); } 
  • trunk/loci/formats/cache/ByteArraySource.java

    r2948 r2951  
    33// 
    44 
    5 package loci.formats.cache; 
     5package loci.formats.cache.sources; 
    66 
    77import java.io.IOException; 
    88import loci.formats.*; 
     9import loci.formats.cache.*; 
    910 
    1011/** Retrieves byte arrays from a file, using Bio-Formats. */ 
     
    2021    super(o);  
    2122    try { 
    22       reader = new FileStitcher(); 
    23       reader.setId(o.toString());  
     23      if (o instanceof IFormatReader) reader = (IFormatReader) o; 
     24      else { 
     25        reader = new FileStitcher(); 
     26        reader.setId(o.toString());  
     27      }  
    2428    } 
    2529    catch (FormatException exc) { throw new CacheException(exc); } 
  • trunk/loci/formats/cache/ImageProcessorSource.java

    r2948 r2951  
    33// 
    44 
    5 package loci.formats.cache; 
     5package loci.formats.cache.sources; 
    66 
    77import java.awt.image.BufferedImage; 
    88import java.io.IOException; 
    99import loci.formats.*; 
     10import loci.formats.cache.*; 
    1011 
    1112/** Retrieves ImageJ image processors from a file, using Bio-Formats. */ 
     
    4950    super(o);  
    5051    try { 
    51       reader = new FileStitcher(); 
    52       reader.setId(o.toString());  
     52      if (o instanceof IFormatReader) reader = (IFormatReader) o; 
     53      else { 
     54        reader = new FileStitcher(); 
     55        reader.setId(o.toString());  
     56      }  
    5357    } 
    5458    catch (FormatException exc) { throw new CacheException(exc); } 
     
    6367  } 
    6468 
    65   /* @see loci.formats.cache.ICacheSource#getObject(int[], int[]) */ 
     69  /** 
     70   * Returns an ImageProcessor; if the pixels require more than 8 bits and 
     71   * there are multiple channels, an array of ImageProcessors is returned 
     72   * (one per channel). 
     73   * 
     74   * @see loci.formats.cache.ICacheSource#getObject(int[], int[])  
     75   */ 
    6676  public Object getObject(int[] len, int[] pos) throws CacheException { 
    6777    if (noIJ) throw new CacheException(NO_IJ_MSG); 
     
    97107      r.setVar("w", w);  
    98108      r.setVar("h", h);  
    99      
    100      if (pixels instanceof byte[]) { 
     109    
     110      if (pixels instanceof byte[]) { 
    101111        byte[] q = (byte[]) pixels; 
    102         if (q.length > w * h) { 
     112        if (q.length > w * h * c) { 
    103113          byte[] tmp = q; 
    104           q = new byte[w * h]; 
    105           System.arraycopy(tmp, 0, q, 0, q.length); 
    106         } 
    107         r.setVar("q", q);  
    108         r.exec("ip = new ByteProcessor(w, h, q, n)");  
     114          q = new byte[w * h * c]; 
     115          System.arraycopy(tmp, 0, q, 0, q.length); 
     116        } 
     117        r.setVar("q", q); 
     118        if (c == 1) r.exec("ip = new ByteProcessor(w, h, q, n)");  
     119        else { 
     120          r.exec("ip = new ColorProcessor(w, h)"); 
     121          byte[][] pix = new byte[3][w * h]; 
     122          for (int i=0; i<c; i++) { 
     123            System.arraycopy(q, i * w * h, pix[i], 0, w * h);  
     124          } 
     125          r.setVar("red", pix[0]);  
     126          r.setVar("green", pix[1]);  
     127          r.setVar("blue", pix[2]);  
     128          r.exec("ip.setRGB(red, green, blue)");  
     129        }        
    109130      } 
    110131      else if (pixels instanceof short[]) { 
    111132        short[] q = (short[]) pixels; 
    112         if (q.length > w * h) { 
     133        if (q.length > w * h * c) { 
    113134          short[] tmp = q; 
    114           q = new short[w * h]; 
     135          q = new short[w * h * c]; 
    115136          System.arraycopy(tmp, 0, q, 0, q.length); 
    116137        } 
    117138        r.setVar("q", q);  
    118         r.exec("ip = new ShortProcessor(w, h, q, n)");  
     139        if (c == 1) r.exec("ip = new ShortProcessor(w, h, q, n)");  
     140        else {  
     141          short[][] pix = new short[3][w * h]; 
     142          for (int i=0; i<c; i++) { 
     143            System.arraycopy(q, i * w * h, pix[i], 0, w * h);  
     144          } 
     145          r.setVar("redS", pix[0]);  
     146          r.setVar("greenS", pix[1]);  
     147          r.setVar("blueS", pix[2]);  
     148          r.setVar("nnull", null); 
     149          r.exec("redProc = new ShortProcessor(w, h, redS, nnull)"); 
     150          r.exec("greenProc = new ShortProcessor(w, h, greenS, nnull)"); 
     151          r.exec("blueProc = new ShortProcessor(w, h, blueS, nnull)"); 
     152          return new Object[] {r.getVar("redProc"), r.getVar("greenProc"), 
     153            r.getVar("blueProc")}; 
     154        }  
    119155      } 
    120156      else if (pixels instanceof int[]) { 
    121157        int[] q = (int[]) pixels; 
    122         if (q.length > w * h) { 
     158        if (q.length > w * h * c) { 
    123159          int[] tmp = q; 
    124           q = new int[w * h]; 
     160          q = new int[w * h * c]; 
    125161          System.arraycopy(tmp, 0, q, 0, q.length); 
    126162        } 
    127163        r.setVar("q", q);  
    128         r.exec("ip = new FloatProcessor(w, h, q)");  
     164        if (c == 1) r.exec("ip = new FloatProcessor(w, h, q)");  
     165        else {  
     166          int[][] pix = new int[3][w * h]; 
     167          for (int i=0; i<c; i++) { 
     168            System.arraycopy(q, i * w * h, pix[i], 0, w * h);  
     169          } 
     170          r.setVar("redS", pix[0]);  
     171          r.setVar("greenS", pix[1]);  
     172          r.setVar("blueS", pix[2]);  
     173          r.setVar("nnull", null); 
     174          r.exec("redProc = new FloatProcessor(w, h, redS)"); 
     175          r.exec("greenProc = new FloatProcessor(w, h, greenS)"); 
     176          r.exec("blueProc = new FloatProcessor(w, h, blueS)"); 
     177          return new Object[] {r.getVar("redProc"), r.getVar("greenProc"), 
     178            r.getVar("blueProc")}; 
     179        }  
    129180      } 
    130181      else if (pixels instanceof float[]) { 
     
    138189          // single channel -- use normal float processor 
    139190          r.setVar("q", q);  
    140           r.exec("ip = new ByteProcessor(w, h, q, n)");  
     191          r.exec("ip = new FloatProcessor(w, h, q, n)");  
    141192        } 
    142193        else { 
     
    178229        r.setVar("q", q);  
    179230        r.exec("ip = new FloatProcessor(w, h, q)");  
    180       }  
     231      } 
    181232      return r.getVar("ip");  
    182233    } 
Note: See TracChangeset for help on using the changeset viewer.