public void drawVerticalString(String string, int x, int y) { // x and y here are the center of the string FontMetrics fm = cp.getFontMetrics(); int ascent = fm.getAscent(); int descent = fm.getDescent(); int height = ascent + descent; int width = cp.getStringWidth(string); int[] mask = new int[width * height]; for (int i = 0; i < width * height; i++) { mask[i] = 0xffffffff; } ColorProcessor cp2 = new ColorProcessor(width, height, mask); cp2.setAntialiasedText(antialias); cp2.setFont(cp.getFont()); cp2.drawString(string, 0, ascent); ColorProcessor cp3 = (ColorProcessor) cp2.rotateLeft(); mask = (int[]) cp3.getPixels(); int newx = x - height / 2; int newy = y - width / 2; int[] pixels = (int[]) cp.getPixels(); int owidth = cp.getWidth(); int oheight = cp.getHeight(); for (int i = 0; i < width; i++) { int b = newy + i; if (b >= 0 && b < oheight) { for (int j = 0; j < height; j++) { int a = newx + j; if (a >= 0 && a < owidth) { if (mask[j + i * height] != 0xffffffff) { pixels[a + owidth * b] = mask[j + i * height]; } } } } } }
public ImagePlusInteractiveDisplay2D( final int width, final int height, final ScreenImageRenderer renderer, final TransformListener2D renderTransformListener) { sourceToScreen = new AffineTransform2D(); final ColorProcessor cp = new ColorProcessor(width, height); screenImage = new ARGBScreenImage(cp.getWidth(), cp.getHeight(), (int[]) cp.getPixels()); this.renderer = renderer; renderer.screenImageChanged(screenImage); this.renderTransformListener = renderTransformListener; imp = new ImagePlus("argbScreenProjection", cp); imp.show(); imp.getCanvas().setMagnification(1.0); imp.draw(); gui = new GUI(imp); handler = new TransformEventHandler2Dij(imp, this); handler.setWindowCenter(width / 2, height / 2); addHandler(handler); // additional keyboard mappings addHandler( new KeyListener() { @Override public void keyPressed(final KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_E) { IJ.log(sourceToScreen.toString()); } else if (e.getKeyCode() == KeyEvent.VK_F1) { IJ.showMessage(handler.getHelpString()); } else if (e.getKeyCode() == KeyEvent.VK_PLUS || e.getKeyCode() == KeyEvent.VK_EQUALS) { IJ.run("In [+]"); } else if (e.getKeyCode() == KeyEvent.VK_MINUS) { IJ.run("Out [-]"); } } @Override public void keyTyped(final KeyEvent e) {} @Override public void keyReleased(final KeyEvent e) {} }); }
public void makeTransition(ImagePlus imp, int from, int num) { if (from > imp.getStackSize()) { IJ.error("Need a following slice to which to transit."); return; } num++; // so that really num slices are added ImageStack stack = imp.getStack(); int[] before = (int[]) (stack.getProcessor(from).convertToRGB().getPixels()); int[] after = (int[]) (stack.getProcessor(from + 1).convertToRGB().getPixels()); for (int z = 1; z < num; z++) { ColorProcessor bp = new ColorProcessor(stack.getWidth(), stack.getHeight()); int[] pixels = (int[]) bp.getPixels(); double dp = z; double dn = num - z; for (int i = 0; i < pixels.length; i++) { pixels[i] = interpolate(before[i], dp, after[i], dn); } new ImagePlus("slice + " + z, bp).show(); stack.addSlice("", bp, from + z - 1); } }
public ColorHistogram(ColorProcessor ip) { this((int[]) ip.getPixels()); }