public Channels() { super("Channels"); if (instance != null) { instance.toFront(); return; } WindowManager.addWindow(this); instance = this; GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); setLayout(gridbag); int y = 0; c.gridx = 0; c.gridy = y++; c.gridwidth = 1; c.fill = GridBagConstraints.BOTH; c.anchor = GridBagConstraints.CENTER; int margin = 32; if (IJ.isMacOSX()) margin = 20; c.insets = new Insets(10, margin, 10, margin); choice = new Choice(); for (int i = 0; i < modes.length; i++) choice.addItem(modes[i]); choice.select(0); choice.addItemListener(this); add(choice, c); CompositeImage ci = getImage(); int nCheckBoxes = ci != null ? ci.getNChannels() : 3; if (nCheckBoxes > CompositeImage.MAX_CHANNELS) nCheckBoxes = CompositeImage.MAX_CHANNELS; checkbox = new Checkbox[nCheckBoxes]; for (int i = 0; i < nCheckBoxes; i++) { checkbox[i] = new Checkbox("Channel " + (i + 1), true); c.insets = new Insets(0, 25, i < nCheckBoxes - 1 ? 0 : 10, 5); c.gridy = y++; add(checkbox[i], c); checkbox[i].addItemListener(this); } c.insets = new Insets(0, 15, 10, 15); c.fill = GridBagConstraints.NONE; c.gridy = y++; moreButton = new Button(moreLabel); moreButton.addActionListener(this); add(moreButton, c); update(); pm = new PopupMenu(); for (int i = 0; i < menuItems.length; i++) addPopupItem(menuItems[i]); add(pm); addKeyListener(IJ.getInstance()); // ImageJ handles keyboard shortcuts setResizable(false); pack(); if (location == null) { GUI.center(this); location = getLocation(); } else setLocation(location); show(); }
public synchronized void setMode(int mode) { if (mode < COMPOSITE || mode > GRAYSCALE) return; if (mode == COMPOSITE && getNChannels() > MAX_CHANNELS) mode = COLOR; for (int i = 0; i < MAX_CHANNELS; i++) active[i] = true; if (this.mode != COMPOSITE && mode == COMPOSITE) img = null; this.mode = mode; if (mode == COLOR || mode == GRAYSCALE) { if (cip != null) { for (int i = 0; i < cip.length; i++) { if (cip[i] != null) cip[i].setPixels(null); cip[i] = null; } } cip = null; rgbPixels = null; awtImage = null; currentChannel = -1; } if (mode == GRAYSCALE || mode == TRANSPARENT) ip.setColorModel(ip.getDefaultColorModel()); Channels.updateChannels(); }
public synchronized void updateImage() { int imageSize = width * height; int nChannels = getNChannels(); int redValue, greenValue, blueValue; int ch = getChannel(); // IJ.log("updateImage: "+ch+"/"+nChannels+" "+currentSlice+" "+currentFrame); if (ch > nChannels) ch = nChannels; boolean newChannel = false; if (ch - 1 != currentChannel) { previousChannel = currentChannel; currentChannel = ch - 1; newChannel = true; } ImageProcessor ip = getProcessor(); if (mode != COMPOSITE) { if (newChannel) { setupLuts(nChannels); LUT cm = lut[currentChannel]; if (mode == COLOR) ip.setColorModel(cm); if (!(cm.min == 0.0 && cm.max == 0.0)) ip.setMinAndMax(cm.min, cm.max); if (!IJ.isMacro()) ContrastAdjuster.update(); for (int i = 0; i < MAX_CHANNELS; i++) active[i] = i == currentChannel ? true : false; Channels.updateChannels(); } if (ip != null) img = ip.createImage(); return; } if (nChannels == 1) { cip = null; rgbPixels = null; awtImage = null; if (ip != null) img = ip.createImage(); return; } if (cip == null || cip[0].getWidth() != width || cip[0].getHeight() != height || getBitDepth() != bitDepth) { setup(nChannels, getImageStack()); rgbPixels = null; rgbSampleModel = null; if (currentChannel >= nChannels) { setSlice(1); currentChannel = 0; newChannel = true; } bitDepth = getBitDepth(); } if (newChannel) { getProcessor().setMinAndMax(cip[currentChannel].getMin(), cip[currentChannel].getMax()); if (!IJ.isMacro()) ContrastAdjuster.update(); } // IJ.log(nChannels+" "+ch+" "+currentChannel+" "+newChannel); if (getSlice() != currentSlice || getFrame() != currentFrame) { currentSlice = getSlice(); currentFrame = getFrame(); int position = getStackIndex(1, currentSlice, currentFrame); if (cip == null) return; for (int i = 0; i < nChannels; ++i) cip[i].setPixels(getImageStack().getProcessor(position + i).getPixels()); } if (rgbPixels == null) { rgbPixels = new int[imageSize]; newPixels = true; imageSource = null; rgbRaster = null; rgbImage = null; } cip[currentChannel].setMinAndMax(ip.getMin(), ip.getMax()); if (singleChannel && nChannels <= 3) { switch (currentChannel) { case 0: cip[0].updateComposite(rgbPixels, 1); break; case 1: cip[1].updateComposite(rgbPixels, 2); break; case 2: cip[2].updateComposite(rgbPixels, 3); break; } } else { if (cip == null) return; if (syncChannels) { ImageProcessor ip2 = getProcessor(); double min = ip2.getMin(), max = ip2.getMax(); for (int i = 0; i < nChannels; i++) { cip[i].setMinAndMax(min, max); lut[i].min = min; lut[i].max = max; } syncChannels = false; } if (active[0]) cip[0].updateComposite(rgbPixels, 4); else { for (int i = 1; i < imageSize; i++) rgbPixels[i] = 0; } if (cip == null || nChannels > cip.length) return; for (int i = 1; i < nChannels; i++) if (active[i]) cip[i].updateComposite(rgbPixels, 5); } if (IJ.isJava16()) createBufferedImage(); else createImage(); if (img == null && awtImage != null) img = awtImage; singleChannel = false; }
public static void updateChannels() { if (instance != null) instance.update(); }