예제 #1
0
파일: InfoLayer.java 프로젝트: av4n/Weasis
  public void drawScale(Graphics2D g2d, Rectangle bound, float fontHeight) {
    ImageElement image = view2DPane.getImage();
    RenderedImage source = view2DPane.getSourceImage();
    if (source == null) {
      return;
    }

    double zoomFactor = view2DPane.getViewModel().getViewScale();

    double scale = image.getPixelSize() / zoomFactor;
    double scaleSizex =
        ajustShowScale(
            scale,
            (int)
                Math.min(zoomFactor * source.getWidth() * image.getRescaleX(), bound.width / 2.0));
    if (showBottomScale & scaleSizex > 30.0d) {
      Unit[] unit = {image.getPixelSpacingUnit()};
      String str = ajustLengthDisplay(scaleSizex * scale, unit);
      g2d.setPaint(color);
      g2d.setStroke(new BasicStroke(1.0F));
      g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
      g2d.setPaint(Color.black);

      double posx = bound.width / 2.0 - scaleSizex / 2.0;
      double posy = bound.height - border - 1.5; // -1.5 for outline
      Line2D line = new Line2D.Double(posx, posy, posx + scaleSizex, posy);
      g2d.draw(getOutLine(line));
      line.setLine(posx, posy - 15.0, posx, posy);
      g2d.draw(getOutLine(line));
      line.setLine(posx + scaleSizex, posy - 15.0, posx + scaleSizex, posy);
      g2d.draw(getOutLine(line));
      int divisor =
          str.indexOf("5") == -1 ? str.indexOf("2") == -1 ? 10 : 2 : 5; // $NON-NLS-1$ //$NON-NLS-2$
      double divSquare = scaleSizex / divisor;
      for (int i = 1; i < divisor; i++) {
        line.setLine(posx + divSquare * i, posy, posx + divSquare * i, posy - 10.0);
        g2d.draw(getOutLine(line));
      }
      if (divSquare > 90) {
        double secondSquare = divSquare / 10.0;
        for (int i = 0; i < divisor; i++) {
          for (int k = 1; k < 10; k++) {
            double secBar = posx + divSquare * i + secondSquare * k;
            line.setLine(secBar, posy, secBar, posy - 5.0);
            g2d.draw(getOutLine(line));
          }
        }
      }

      g2d.setPaint(Color.white);
      line.setLine(posx, posy, posx + scaleSizex, posy);
      g2d.draw(line);
      line.setLine(posx, posy - 15.0, posx, posy);
      g2d.draw(line);
      line.setLine(posx + scaleSizex, posy - 15.0, posx + scaleSizex, posy);
      g2d.draw(line);
      for (int i = 0; i < divisor; i++) {
        line.setLine(posx + divSquare * i, posy, posx + divSquare * i, posy - 10.0);
        g2d.draw(line);
      }
      if (divSquare > 90) {
        double secondSquare = divSquare / 10.0;
        for (int i = 0; i < divisor; i++) {
          for (int k = 1; k < 10; k++) {
            double secBar = posx + divSquare * i + secondSquare * k;
            line.setLine(secBar, posy, secBar, posy - 5.0);
            g2d.draw(line);
          }
        }
      }
      g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_DEFAULT);
      String pixSizeDesc = image.getPixelSizeCalibrationDescription();
      if (pixSizeDesc != null) {
        GraphicLabel.paintFontOutline(
            g2d, pixSizeDesc, (float) (posx + scaleSizex + 5), (float) posy - fontHeight);
      }
      str += " " + unit[0].getAbbreviation(); // $NON-NLS-1$
      GraphicLabel.paintFontOutline(g2d, str, (float) (posx + scaleSizex + 5), (float) posy);
    }

    double scaleSizeY =
        ajustShowScale(
            scale,
            (int)
                Math.min(
                    zoomFactor * source.getHeight() * image.getRescaleY(), bound.height / 2.0));

    if (scaleSizeY > 30.0d) {
      Unit[] unit = {image.getPixelSpacingUnit()};
      String str = ajustLengthDisplay(scaleSizeY * scale, unit);

      g2d.setPaint(color);
      g2d.setStroke(new BasicStroke(1.0F));
      g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
      g2d.setPaint(Color.black);

      double posx = border + 20;
      double posy = bound.height / 2.0 - scaleSizeY / 2.0;
      Line2D line = new Line2D.Double(posx, posy, posx, posy + scaleSizeY);
      g2d.draw(getOutLine(line));
      line.setLine(posx, posy, posx + 15, posy);
      g2d.draw(getOutLine(line));
      line.setLine(posx, posy + scaleSizeY, posx + 15, posy + scaleSizeY);
      g2d.draw(getOutLine(line));
      int divisor =
          str.indexOf("5") == -1 ? str.indexOf("2") == -1 ? 10 : 2 : 5; // $NON-NLS-1$ //$NON-NLS-2$
      double divSquare = scaleSizeY / divisor;
      for (int i = 0; i < divisor; i++) {
        line.setLine(posx, posy + divSquare * i, posx + 10.0, posy + divSquare * i);
        g2d.draw(getOutLine(line));
      }
      if (divSquare > 90) {
        double secondSquare = divSquare / 10.0;
        for (int i = 0; i < divisor; i++) {
          for (int k = 1; k < 10; k++) {
            double secBar = posy + divSquare * i + secondSquare * k;
            line.setLine(posx, secBar, posx + 5.0, secBar);
            g2d.draw(getOutLine(line));
          }
        }
      }

      g2d.setPaint(Color.white);
      line.setLine(posx, posy, posx, posy + scaleSizeY);
      g2d.draw(line);
      line.setLine(posx, posy, posx + 15, posy);
      g2d.draw(line);
      line.setLine(posx, posy + scaleSizeY, posx + 15, posy + scaleSizeY);
      g2d.draw(line);
      for (int i = 0; i < divisor; i++) {
        line.setLine(posx, posy + divSquare * i, posx + 10.0, posy + divSquare * i);
        g2d.draw(line);
      }
      if (divSquare > 90) {
        double secondSquare = divSquare / 10.0;
        for (int i = 0; i < divisor; i++) {
          for (int k = 1; k < 10; k++) {
            double secBar = posy + divSquare * i + secondSquare * k;
            line.setLine(posx, secBar, posx + 5.0, secBar);
            g2d.draw(line);
          }
        }
      }

      g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_DEFAULT);

      GraphicLabel.paintFontOutline(
          g2d, str + " " + unit[0].getAbbreviation(), (int) posx, (int) (posy - 5)); // $NON-NLS-1$
    }
  }
예제 #2
0
파일: InfoLayer.java 프로젝트: av4n/Weasis
  @Override
  public void paint(Graphics2D g2) {
    ImageElement image = view2DPane.getImage();
    if (!visible || image == null) {
      return;
    }

    final Rectangle bound = view2DPane.getBounds();
    float midx = bound.width / 2f;
    float midy = bound.height / 2f;

    g2.setPaint(color);

    final float fontHeight = FontTools.getAccurateFontHeight(g2);
    final float midfontHeight = fontHeight * FontTools.getMidFontHeightFactor();
    float drawY = bound.height - border - 1.5f; // -1.5 for outline

    if (!image.isReadable()) {
      String message = Messages.getString("InfoLayer.error_msg"); // $NON-NLS-1$
      float y = midy;
      GraphicLabel.paintColorFontOutline(
          g2, message, midx - g2.getFontMetrics().stringWidth(message) / 2, y, Color.RED);
      String[] desc = image.getMediaReader().getReaderDescription();
      if (desc != null) {
        for (String str : desc) {
          if (str != null) {
            y += fontHeight;
            GraphicLabel.paintColorFontOutline(
                g2, str, midx - g2.getFontMetrics().stringWidth(str) / 2, y, Color.RED);
          }
        }
      }
    }
    if (image.isReadable() && getDisplayPreferences(SCALE)) {
      drawScale(g2, bound, fontHeight);
    }
    if (image.isReadable() && getDisplayPreferences(LUT)) {
      drawLUT(g2, bound, midfontHeight);
    }

    if (getDisplayPreferences(PIXEL)) {
      String str =
          Messages.getString("InfoLayer.pix") + ": " + pixelInfo; // $NON-NLS-1$ //$NON-NLS-2$
      GraphicLabel.paintFontOutline(g2, str, border, drawY - 1);
      drawY -= fontHeight + 2;
      pixelInfoBound.setBounds(
          border - 2,
          (int) drawY + 3,
          g2.getFontMetrics().stringWidth(str) + 4,
          (int) fontHeight + 2);
      // g2.draw(pixelInfoBound);
    }
    if (getDisplayPreferences(WINDOW_LEVEL)) {
      GraphicLabel.paintFontOutline(
          g2,
          Messages.getString("InfoLayer.win")
              + ": "
              + view2DPane.getActionValue(ActionW.WINDOW.cmd()) // $NON-NLS-1$ //$NON-NLS-2$
              + " "
              + Messages.getString("InfoLayer.level")
              + ": "
              + view2DPane.getActionValue(ActionW.LEVEL.cmd()),
          border,
          drawY); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
      drawY -= fontHeight;
    }
    if (getDisplayPreferences(ZOOM)) {
      GraphicLabel.paintFontOutline(
          g2,
          Messages.getString("InfoLayer.zoom")
              + ": "
              + DecFormater.twoDecimal(view2DPane.getViewModel().getViewScale() * 100)
              + " "
              + Messages.getString("InfoLayer.percent"),
          border, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
          drawY);
      drawY -= fontHeight;
    }
    if (getDisplayPreferences(ROTATION)) {
      GraphicLabel.paintFontOutline(
          g2,
          Messages.getString("InfoLayer.angle")
              + ": "
              + view2DPane.getActionValue(ActionW.ROTATION.cmd())
              + " "
              + Messages.getString("InfoLayer.angle_symb"),
          border,
          drawY); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
      drawY -= fontHeight;
    }

    if (getDisplayPreferences(FRAME)) {
      GraphicLabel.paintFontOutline(
          g2,
          Messages.getString("InfoLayer.frame") // $NON-NLS-1$
              + ": " //$NON-NLS-1$
              + (view2DPane.getFrameIndex() + 1)
              + " / " //$NON-NLS-1$
              + view2DPane
                  .getSeries()
                  .size(
                      (Filter<ImageElement>)
                          view2DPane.getActionValue(ActionW.FILTERED_SERIES.cmd())),
          border,
          drawY);
      drawY -= fontHeight;
    }

    // if (getDisplayPreferences(ANNOTATIONS)) {
    // MediaSeries<ImageElement> series = view2DPane.getSeries();
    //
    // Boolean synchLink = (Boolean) view2DPane.getActionValue(ActionW.SYNCH_LINK.cmd());
    // String str = synchLink != null && synchLink ? "linked" : "unlinked";
    // paintFontOutline(g2, str, bound.width - g2.getFontMetrics().stringWidth(str) - border,
    // drawY);
    //
    // }

  }
예제 #3
0
파일: InfoLayer.java 프로젝트: av4n/Weasis
  public void drawLUT(Graphics2D g2, Rectangle bound, float midfontHeight) {
    ByteLut lut = (ByteLut) view2DPane.getActionValue(ActionW.LUT.cmd());
    if (lut != null && bound.height > 350) {

      if (lut.getLutTable() == null) {
        lut = ByteLut.grayLUT;
      }
      byte[][] table =
          (Boolean) view2DPane.getActionValue(ActionW.INVERSELUT.cmd())
              ? lut.getInvertedLutTable()
              : lut.getLutTable();
      float length = table[0].length;
      float x = bound.width - 30f;
      float y = bound.height / 2f - length / 2f;

      g2.setPaint(Color.black);
      Rectangle2D.Float rect = new Rectangle2D.Float(x - 11f, y - 2f, 12f, 2f);
      g2.draw(rect);
      int separation = 4;
      float step = length / separation;
      for (int i = 1; i < separation; i++) {
        float posY = y + i * step;
        rect.setRect(x - 6f, posY - 1f, 7f, 2f);
        g2.draw(rect);
      }
      rect.setRect(x - 11f, y + length, 12f, 2f);
      g2.draw(rect);
      rect.setRect(x - 2f, y - 2f, 23f, length + 4f);
      g2.draw(rect);

      g2.setPaint(Color.white);
      Line2D.Float line = new Line2D.Float(x - 10f, y - 1f, x - 1f, y - 1f);
      g2.draw(line);
      float stepWindow = (Float) view2DPane.getActionValue(ActionW.WINDOW.cmd()) / separation;
      float firstlevel = (Float) view2DPane.getActionValue(ActionW.LEVEL.cmd()) - stepWindow * 2f;
      String str = "" + (int) firstlevel; // $NON-NLS-1$
      GraphicLabel.paintFontOutline(
          g2, str, x - g2.getFontMetrics().stringWidth(str) - 12f, y + midfontHeight);
      for (int i = 1; i < separation; i++) {
        float posY = y + i * step;
        line.setLine(x - 5f, posY, x - 1f, posY);
        g2.draw(line);
        str = "" + (int) (firstlevel + i * stepWindow); // $NON-NLS-1$
        GraphicLabel.paintFontOutline(
            g2, str, x - g2.getFontMetrics().stringWidth(str) - 7, posY + midfontHeight);
      }

      line.setLine(x - 10f, y + length + 1f, x - 1f, y + length + 1f);
      g2.draw(line);
      str = "" + (int) (firstlevel + 4 * stepWindow); // $NON-NLS-1$
      GraphicLabel.paintFontOutline(
          g2, str, x - g2.getFontMetrics().stringWidth(str) - 12, y + length + midfontHeight);
      rect.setRect(x - 1f, y - 1f, 21f, length + 2f);
      g2.draw(rect);

      for (int k = 0; k < length; k++) {
        g2.setPaint(new Color(table[0][k] & 0xff, table[1][k] & 0xff, table[2][k] & 0xff));
        rect.setRect(x, y + k, 19f, 1f);
        g2.draw(rect);
      }
    }
  }