void scale(ImageProcessor ip) { if (newWindow) { Rectangle r = ip.getRoi(); ImagePlus imp2 = imp.createImagePlus(); imp2.setProcessor(title, ip.resize(newWidth, newHeight)); Calibration cal = imp2.getCalibration(); if (cal.scaled()) { cal.pixelWidth *= 1.0 / xscale; cal.pixelHeight *= 1.0 / yscale; } imp2.show(); imp.trimProcessor(); imp2.trimProcessor(); imp2.changes = true; } else { if (processStack && imp.getStackSize() > 1) { Undo.reset(); StackProcessor sp = new StackProcessor(imp.getStack(), ip); sp.scale(xscale, yscale, bgValue); } else { ip.snapshot(); Undo.setup(Undo.FILTER, imp); ip.setSnapshotCopyMode(true); ip.scale(xscale, yscale); ip.setSnapshotCopyMode(false); } imp.killRoi(); imp.updateAndDraw(); imp.changes = true; } }
private void doRGBProjection(ImageStack stack) { ImageStack[] channels = ChannelSplitter.splitRGB(stack, true); ImagePlus red = new ImagePlus("Red", channels[0]); ImagePlus green = new ImagePlus("Green", channels[1]); ImagePlus blue = new ImagePlus("Blue", channels[2]); imp.unlock(); ImagePlus saveImp = imp; imp = red; color = "(red)"; doProjection(); ImagePlus red2 = projImage; imp = green; color = "(green)"; doProjection(); ImagePlus green2 = projImage; imp = blue; color = "(blue)"; doProjection(); ImagePlus blue2 = projImage; int w = red2.getWidth(), h = red2.getHeight(), d = red2.getStackSize(); if (method == SD_METHOD) { ImageProcessor r = red2.getProcessor(); ImageProcessor g = green2.getProcessor(); ImageProcessor b = blue2.getProcessor(); double max = 0; double rmax = r.getStatistics().max; if (rmax > max) max = rmax; double gmax = g.getStatistics().max; if (gmax > max) max = gmax; double bmax = b.getStatistics().max; if (bmax > max) max = bmax; double scale = 255 / max; r.multiply(scale); g.multiply(scale); b.multiply(scale); red2.setProcessor(r.convertToByte(false)); green2.setProcessor(g.convertToByte(false)); blue2.setProcessor(b.convertToByte(false)); } RGBStackMerge merge = new RGBStackMerge(); ImageStack stack2 = merge.mergeStacks(w, h, d, red2.getStack(), green2.getStack(), blue2.getStack(), true); imp = saveImp; projImage = new ImagePlus(makeTitle(), stack2); }
/** Restores original disk or network version of image. */ public void revertToSaved(ImagePlus imp) { Image img; ProgressBar pb = IJ.getInstance().getProgressBar(); ImageProcessor ip; String path = fi.directory + fi.fileName; if (fi.fileFormat == fi.GIF_OR_JPG) { // restore gif or jpg img = Toolkit.getDefaultToolkit().createImage(path); imp.setImage(img); if (imp.getType() == ImagePlus.COLOR_RGB) Opener.convertGrayJpegTo8Bits(imp); return; } if (fi.fileFormat == fi.DICOM) { // restore DICOM ImagePlus imp2 = (ImagePlus) IJ.runPlugIn("ij.plugin.DICOM", path); if (imp2 != null) imp.setProcessor(null, imp2.getProcessor()); return; } if (fi.fileFormat == fi.BMP) { // restore BMP ImagePlus imp2 = (ImagePlus) IJ.runPlugIn("ij.plugin.BMP_Reader", path); if (imp2 != null) imp.setProcessor(null, imp2.getProcessor()); return; } if (fi.fileFormat == fi.PGM) { // restore PGM ImagePlus imp2 = (ImagePlus) IJ.runPlugIn("ij.plugin.PGM_Reader", path); if (imp2 != null) imp.setProcessor(null, imp2.getProcessor()); return; } if (fi.fileFormat == fi.ZIP_ARCHIVE) { // restore ".zip" file ImagePlus imp2 = (new Opener()).openZip(path); if (imp2 != null) imp.setProcessor(null, imp2.getProcessor()); return; } // restore PNG or another image opened using ImageIO if (fi.fileFormat == fi.IMAGEIO) { ImagePlus imp2 = (new Opener()).openUsingImageIO(path); if (imp2 != null) imp.setProcessor(null, imp2.getProcessor()); return; } if (fi.nImages > 1) return; ColorModel cm; if (fi.url == null || fi.url.equals("")) IJ.showStatus("Loading: " + path); else IJ.showStatus("Loading: " + fi.url + fi.fileName); Object pixels = readPixels(fi); if (pixels == null) return; cm = createColorModel(fi); switch (fi.fileType) { case FileInfo.GRAY8: case FileInfo.COLOR8: case FileInfo.BITMAP: ip = new ByteProcessor(width, height, (byte[]) pixels, cm); imp.setProcessor(null, ip); break; case FileInfo.GRAY16_SIGNED: case FileInfo.GRAY16_UNSIGNED: case FileInfo.GRAY12_UNSIGNED: ip = new ShortProcessor(width, height, (short[]) pixels, cm); imp.setProcessor(null, ip); break; case FileInfo.GRAY32_INT: case FileInfo.GRAY32_FLOAT: ip = new FloatProcessor(width, height, (float[]) pixels, cm); imp.setProcessor(null, ip); break; case FileInfo.RGB: case FileInfo.BGR: case FileInfo.ARGB: case FileInfo.ABGR: case FileInfo.RGB_PLANAR: img = Toolkit.getDefaultToolkit() .createImage(new MemoryImageSource(width, height, (int[]) pixels, 0, width)); imp.setImage(img); break; } }
public void run(String arg) { int wOld, hOld, wNew, hNew; boolean fIsStack = false; ImagePlus imp = IJ.getImage(); wOld = imp.getWidth(); hOld = imp.getHeight(); ImageStack stackOld = imp.getStack(); if ((stackOld != null) && (stackOld.getSize() > 1)) fIsStack = true; String[] sPositions = { "Top-Left", "Top-Center", "Top-Right", "Center-Left", "Center", "Center-Right", "Bottom-Left", "Bottom-Center", "Bottom-Right" }; String strTitle = fIsStack ? "Resize Stack Canvas" : "Resize Image Canvas"; GenericDialog gd = new GenericDialog(strTitle); gd.addNumericField("Width:", wOld, 0, 5, "pixels"); gd.addNumericField("Height:", hOld, 0, 5, "pixels"); gd.addChoice("Position:", sPositions, sPositions[4]); gd.addCheckbox("Zero Fill", zeroFill); gd.showDialog(); if (gd.wasCanceled()) return; wNew = (int) gd.getNextNumber(); hNew = (int) gd.getNextNumber(); int iPos = gd.getNextChoiceIndex(); zeroFill = gd.getNextBoolean(); Prefs.set("resizer.zero", zeroFill); int xOff, yOff; int xC = (wNew - wOld) / 2; // offset for centered int xR = (wNew - wOld); // offset for right int yC = (hNew - hOld) / 2; // offset for centered int yB = (hNew - hOld); // offset for bottom switch (iPos) { case 0: // TL xOff = 0; yOff = 0; break; case 1: // TC xOff = xC; yOff = 0; break; case 2: // TR xOff = xR; yOff = 0; break; case 3: // CL xOff = 0; yOff = yC; break; case 4: // C xOff = xC; yOff = yC; break; case 5: // CR xOff = xR; yOff = yC; break; case 6: // BL xOff = 0; yOff = yB; break; case 7: // BC xOff = xC; yOff = yB; break; case 8: // BR xOff = xR; yOff = yB; break; default: // center xOff = xC; yOff = yC; break; } if (fIsStack) { ImageStack stackNew = expandStack(stackOld, wNew, hNew, xOff, yOff); imp.setStack(null, stackNew); } else { if (!IJ.macroRunning()) Undo.setup(Undo.COMPOUND_FILTER, imp); ImageWindow win = imp.getWindow(); if (win != null && (win instanceof PlotWindow)) ((PlotWindow) win).getPlot().setFrozen(true); ImageProcessor newIP = expandImage(imp.getProcessor(), wNew, hNew, xOff, yOff); imp.setProcessor(null, newIP); if (!IJ.macroRunning()) Undo.setup(Undo.COMPOUND_FILTER_DONE, imp); } Overlay overlay = imp.getOverlay(); if (overlay != null) overlay.translate(xOff, yOff); }