Changeset 2059


Ignore:
Timestamp:
01/10/07 10:52:58 (13 years ago)
Author:
melissa
Message:

Improved RGB stack handling, so min/max adjustment is done before
RGB conversion.

File:
1 edited

Legend:

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

    r2053 r2059  
    583583                System.arraycopy(tmp, 0, bytes, 0, bytes.length); 
    584584              } 
     585               
     586              for (int ch=0; ch<c; ch++) { 
     587                byte[] nb = new byte[w * h]; 
     588                if (c == 1) nb = bytes; 
     589                else System.arraycopy(bytes, ch*w*h, nb, 0, nb.length); 
     590                ip = new ByteProcessor(w, h, nb, null); 
     591                if (stackB == null) stackB = new ImageStack(w, h); 
     592                stackB.addSlice(imageName + ":" + (j + 1), ip); 
     593              } 
     594               
     595              /* 
    585596              if (c == 1) { 
    586597                ip = new ByteProcessor(w, h, bytes, null); 
     
    600611                stackO.addSlice(imageName + ":" + (j + 1), ip); 
    601612              } 
     613              */ 
    602614            } 
    603615            else if (pixels instanceof short[]) { 
     
    608620                System.arraycopy(tmp, 0, s, 0, s.length); 
    609621              } 
    610               if (c == 1) { 
    611                 ip = new ShortProcessor(w, h, s, null); 
     622               
     623              for (int ch=0; ch<c; ch++) { 
     624                short[] nb = new short[w * h]; 
     625                if (c == 1) nb = s; 
     626                else System.arraycopy(s, ch*w*h, nb, 0, nb.length); 
     627                ip = new ShortProcessor(w, h, nb, null); 
    612628                if (stackS == null) stackS = new ImageStack(w, h); 
    613629                stackS.addSlice(imageName + ":" + (j + 1), ip); 
    614               } 
    615               else { 
    616                 if (stackO == null) stackO = new ImageStack(w, h); 
    617                 short[][] pix = new short[c][w*h]; 
    618                 for (int k=0; k<c; k++) { 
    619                   System.arraycopy(s, k*pix[k].length, pix[k], 0, 
    620                     pix[k].length); 
    621                 } 
    622                 byte[][] bytes = new byte[c][w*h]; 
    623                 for (int k=0; k<c; k++) { 
    624                   ip = new ShortProcessor(w, h, pix[k], null); 
    625                   ip = ip.convertToByte(true); 
    626                   bytes[k] = (byte[]) ip.getPixels(); 
    627                 } 
    628                 ip = new ColorProcessor(w, h); 
    629                 ((ColorProcessor) ip).setRGB(bytes[0], bytes[1], 
    630                   pix.length >= 3 ? bytes[2] : new byte[w*h]); 
    631                 stackO.addSlice(imageName + ":" + (j + 1), ip); 
    632630              } 
    633631            } 
     
    639637                System.arraycopy(tmp, 0, s, 0, s.length); 
    640638              } 
    641               if (c == 1) { 
    642                 ip = new FloatProcessor(w, h, s); 
     639 
     640              for (int ch=0; ch<c; ch++) { 
     641                int[] nb = new int[w * h]; 
     642                if (c == 1) nb = s; 
     643                else System.arraycopy(s, ch*w*h, nb, 0, nb.length); 
     644                ip = new FloatProcessor(w, h, nb); 
    643645                if (stackF == null) stackF = new ImageStack(w, h); 
    644646                stackF.addSlice(imageName + ":" + (j + 1), ip); 
    645               } 
    646               else { 
    647                 if (stackO == null) stackO = new ImageStack(w, h); 
    648                 int[][] pix = new int[c][w*h]; 
    649                 for (int k=0; k<c; k++) { 
    650                   System.arraycopy(s, k*pix[k].length, pix[k], 0, 
    651                     pix[k].length); 
    652                 } 
    653                 byte[][] bytes = new byte[c][w*h]; 
    654                 for (int k=0; k<c; k++) { 
    655                   ip = new FloatProcessor(w, h, pix[k]); 
    656                   ip = ip.convertToByte(true); 
    657                   bytes[k] = (byte[]) ip.getPixels(); 
    658                 } 
    659                 ip = new ColorProcessor(w, h); 
    660                 ((ColorProcessor) ip).setRGB(bytes[0], bytes[1], 
    661                   pix.length >= 3 ? bytes[2] : new byte[w*h]); 
    662                 stackO.addSlice(imageName + ":" + (j + 1), ip); 
    663647              } 
    664648            } 
     
    670654                System.arraycopy(tmp, 0, f, 0, f.length); 
    671655              } 
    672               if (c == 1) { 
    673                 ip = new FloatProcessor(w, h, f, null); 
     656 
     657              for (int ch=0; ch<c; ch++) { 
     658                float[] nb = new float[w * h]; 
     659                if (c == 1) nb = f; 
     660                else System.arraycopy(f, ch*w*h, nb, 0, nb.length); 
     661                ip = new FloatProcessor(w, h, nb, null); 
    674662                if (stackF == null) stackF = new ImageStack(w, h); 
    675  
     663                 
    676664                if (stackB != null) { 
    677665                  ip = ip.convertToByte(true); 
     
    686674                else stackF.addSlice(imageName + ":" + (j + 1), ip); 
    687675              } 
    688               else { 
    689                 if (stackO == null) stackO = new ImageStack(w, h); 
    690                 float[][] pix = new float[c][w*h]; 
    691                 if (!r.isInterleaved(id)) { 
    692                   for (int k=0; k<f.length; k+=c) { 
    693                     for (int l=0; l<c; l++) { 
    694                       pix[l][k / 3] = f[k + l]; 
    695                     } 
    696                   } 
    697                 } 
    698                 else { 
    699                   for (int k=0; k<c; k++) { 
    700                     System.arraycopy(f, k*pix[k].length, pix[k], 0, 
    701                       pix[k].length); 
    702                   } 
    703                 } 
    704                 byte[][] bytes = new byte[c][w*h]; 
    705                 for (int k=0; k<c; k++) { 
    706                   ip = new FloatProcessor(w, h, pix[k], null); 
    707                   ip = ip.convertToByte(true); 
    708                   bytes[k] = (byte[]) ip.getPixels(); 
    709                 } 
    710                 ip = new ColorProcessor(w, h); 
    711                 ((ColorProcessor) ip).setRGB(bytes[0], bytes[1], 
    712                   pix.length >= 3 ? bytes[2] : new byte[w*h]); 
    713                 stackO.addSlice(imageName + ":" + (j + 1), ip); 
    714               } 
    715676            } 
    716677            else if (pixels instanceof double[]) { 
     
    721682                System.arraycopy(tmp, 0, d, 0, d.length); 
    722683              } 
    723               if (c == 1) { 
    724                 ip = new FloatProcessor(w, h, d); 
     684              
     685              for (int ch=0; ch<c; ch++) { 
     686                double[] nb = new double[w * h]; 
     687                if (c == 1) nb = d; 
     688                else System.arraycopy(d, ch*w*h, nb, 0, nb.length); 
     689                ip = new FloatProcessor(w, h, nb); 
    725690                if (stackF == null) stackF = new ImageStack(w, h); 
    726691                stackF.addSlice(imageName + ":" + (j + 1), ip); 
    727               } 
    728               else { 
    729                 if (stackO == null) stackO = new ImageStack(w, h); 
    730                 double[][] pix = new double[c][w*h]; 
    731                 for (int k=0; k<c; k++) { 
    732                   System.arraycopy(d, k*pix[k].length, pix[k], 0, 
    733                     pix[k].length); 
    734                 } 
    735                 byte[][] bytes = new byte[c][w*h]; 
    736                 for (int k=0; k<c; k++) { 
    737                   ip = new FloatProcessor(w, h, pix[k]); 
    738                   ip = ip.convertToByte(true); 
    739                   bytes[k] = (byte[]) ip.getPixels(); 
    740                 } 
    741                 ip = new ColorProcessor(w, h); 
    742                 ((ColorProcessor) ip).setRGB(bytes[0], bytes[1], 
    743                   pix.length >= 3 ? bytes[2] : new byte[w*h]); 
    744                 stackO.addSlice(imageName + ":" + (j + 1), ip); 
    745692              } 
    746693            } 
     
    992939    FileStitcher fs, String id) 
    993940  { 
     941    adjustDisplay(imp); 
     942     
     943    // convert to RGB if needed 
     944    
     945    try { 
     946      if (r.isRGB(id)) { 
     947        int c = r.getSizeC(id); 
     948        ImageStack s = imp.getStack(); 
     949        ImageStack newStack = new ImageStack(s.getWidth(), s.getHeight()); 
     950        for (int i=0; i<r.getImageCount(id); i++) { 
     951          byte[][] bytes = new byte[c][]; 
     952          for (int j=0; j<c; j++) { 
     953            ImageProcessor p = s.getProcessor(i*c + j + 1).convertToByte(true); 
     954            bytes[j] = (byte[]) p.getPixels(); 
     955          } 
     956          ColorProcessor cp = new ColorProcessor(s.getWidth(), s.getHeight()); 
     957          cp.setRGB(bytes[0], bytes[1], bytes.length == 3 ? bytes[2] :  
     958            new byte[s.getWidth() * s.getHeight()]); 
     959          newStack.addSlice(s.getSliceLabel(i*c + 1), cp); 
     960        } 
     961        imp.setStack(imp.getTitle(), newStack); 
     962      } 
     963    } 
     964    catch (FormatException e) { } 
     965    catch (IOException e) { } 
     966     
    994967    try { 
    995968      if (stackFormat.equals(VIEW_STANDARD)) { 
    996         adjustDisplay(imp); 
    997969        imp.show(); 
    998970      } 
     
    1020992        } 
    1021993 
    1022         adjustDisplay(imp); 
    1023  
    1024994        ReflectedUniverse ru = null; 
    1025995        ru = new ReflectedUniverse(); 
     
    10531023          imp.setStack(imp.getTitle(), is); 
    10541024        } 
    1055         adjustDisplay(imp); 
    10561025        WindowManager.setTempCurrentImage(imp); 
    10571026        IJ.run("View5D ", "slicecount=" + sizeZ + " timecount=" + sizeT); 
     
    10591028    } 
    10601029    catch (Exception e) { 
    1061       adjustDisplay(imp); 
    10621030      imp.show(); 
    10631031    } 
Note: See TracChangeset for help on using the changeset viewer.