Changeset 3337


Ignore:
Timestamp:
11/02/07 11:23:04 (12 years ago)
Author:
melissa
Message:

CustomImage can now merge up to 4 channels.

Location:
trunk/loci/plugins
Files:
3 edited

Legend:

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

    r3244 r3337  
    7676          } 
    7777    compositeImage = true; 
    78                 setDimensions(channels, stackSize / channels, 1); 
     78    setDimensions(channels, stackSize / channels, 1); 
    7979                setup(channels, stack2); 
    8080                setStack(imp.getTitle(), stack2); 
     
    117117        public void updateImage() { 
    118118                int imageSize = width * height; 
    119                 int nChannels = getNChannels(); 
    120                 int redValue, greenValue, blueValue; 
     119                int nChannels = channels; 
     120                int redValue, greenValue, blueValue, alphaValue; 
    121121                int slice = getCurrentSlice(); 
    122122 
     
    203203                                        } 
    204204                                        break; 
    205                         } 
     205                    case 3: 
     206          for (int i=0; i<imageSize; ++i) { 
     207            alphaValue = pixels[3][i] & 0xff; 
     208            awtImagePixels[i] = 
     209              (awtImagePixels[i] & 0xffffff) | (alphaValue << 24); 
     210          } 
     211          break; 
     212      } 
    206213                } 
    207214    else { 
    208215                        for (int i=0; i<imageSize; ++i) { 
    209                                 redValue = 0; greenValue = 0; blueValue = 0; 
     216                                redValue = 0; greenValue = 0; blueValue = 0; alphaValue = 0; 
    210217                                for (int j=0; j<nChannels; ++j) { 
    211218                                        redValue += (pixels[j][i] >> 16) & 0xff; 
    212219                                        greenValue += (pixels[j][i]>>8) & 0xff; 
    213220                                        blueValue += (pixels[j][i]) & 0xff; 
    214                                         if (redValue > 255) redValue = 255; 
     221                                  alphaValue += ((pixels[j][i]) >> 24) & 0xff; 
     222          if (redValue > 255) redValue = 255; 
    215223                                        if (greenValue > 255) greenValue = 255; 
    216224                                        if (blueValue > 255) blueValue = 255; 
    217                                 } 
    218                                 awtImagePixels[i] = (redValue << 16) | (greenValue << 8) | (blueValue); 
     225          if (alphaValue > 255) alphaValue = 255; 
     226        } 
     227                                awtImagePixels[i] = (alphaValue << 24) | (redValue << 16) | 
     228          (greenValue << 8) | (blueValue); 
    219229                        } 
    220230                } 
    221231                if (imageSource == null) { 
    222                         imageColorModel = new DirectColorModel(32, 0xff0000, 0xff00, 0xff); 
     232      if (channels == 4) { 
     233        imageColorModel = new DirectColorModel(32, 0xff0000, 0xff00, 0xff, 
     234          0xff000000); 
     235      } 
     236      else imageColorModel = new DirectColorModel(32, 0xff0000, 0xff00, 0xff); 
    223237                        imageSource = new MemoryImageSource(width, height, imageColorModel, 
    224238        awtImagePixels, 0, width); 
     
    245259                byte[] g = new byte[size]; 
    246260                byte[] b = new byte[size]; 
    247                 ((ColorProcessor) iip).getRGB(r, g, b); 
    248                 ImageStack stack = new ImageStack(w, h); 
     261    ((ColorProcessor) iip).getRGB(r, g, b); 
     262    ImageStack stack = new ImageStack(w, h); 
    249263                stack.addSlice("Red", r); 
    250264                stack.addSlice("Green", g); 
  • trunk/loci/plugins/Importer.java

    r3330 r3337  
    644644      makeRGB(imp, r, r.getSizeC(), options.isAutoscale()); 
    645645    } 
    646     else if (mergeChannels && r.getSizeC() > 1 && r.getSizeC() < 4 && 
     646    else if (mergeChannels && r.getSizeC() > 1 && r.getSizeC() <= 4 && 
    647647      !r.isIndexed()) 
    648648    { 
     
    671671      } 
    672672    } 
    673     else if (mergeChannels && r.getSizeC() >= 4) { 
     673    else if (mergeChannels && r.getSizeC() > 4) { 
    674674      // ask the user what they would like to do... 
    675675      // CTR FIXME -- migrate into ImporterOptions? 
     
    681681      int planes2 = r.getImageCount() / 3; 
    682682      if (planes2 * 3 < r.getImageCount()) planes2++; 
    683  
    684       if (options.promptMergeOption(planes1, planes2) == 
     683      int planes3 = r.getImageCount() / 4; 
     684      if (planes3 * 4 < r.getImageCount()) planes3++; 
     685 
     686      if (options.promptMergeOption(planes1, planes2, planes3) == 
    685687        ImporterOptions.STATUS_OK) 
    686688      { 
     
    691693        else if (option.indexOf("3 channels") != -1) { 
    692694          makeRGB(imp, r, 3, options.isAutoscale()); 
     695        } 
     696        else if (option.indexOf("4 channels") != -1) { 
     697          imp = new CustomImage(imp, stackOrder, r.getSizeZ(), 
     698            r.getSizeT() * planes3, 4, options.isAutoscale()); 
    693699        } 
    694700      } 
  • trunk/loci/plugins/ImporterOptions.java

    r3305 r3337  
    415415  } 
    416416 
    417   public int promptMergeOption(int one, int two) { 
     417  public int promptMergeOption(int one, int two, int three) { 
    418418    GenericDialog gd = new GenericDialog("Merging Options..."); 
    419419 
    420420    String[] options = new String[] {one + " planes, 2 channels per plane", 
    421       two + " planes, 3 channels per plane", MERGE_DEFAULT}; 
     421      two + " planes, 3 channels per plane", 
     422      three + " planes, 4 channels per plane", MERGE_DEFAULT}; 
    422423 
    423424    gd.addMessage("How would you like to merge this data?"); 
Note: See TracChangeset for help on using the changeset viewer.