Example #1
0
 @Override
 public void paint(Graphics g) {
   g2d = (Graphics2D) g;
   g2d.drawImage(bi, 0, 0, bi.getWidth(), bi.getHeight(), null);
   g2d.setColor(Color.WHITE);
   g2d.setColor(getAverageColor(bi));
   g2d.fillRect(bi.getMinX(), bi.getMinY(), 60, 60);
 }
  protected boolean drawImage(Image img, AffineTransform xform, Color bgcolor, ImageObserver obs) {
    boolean rv;
    if (comp == null || comp instanceof AlphaComposite)
      rv = super.drawImage(img, xform, bgcolor, obs);
    else {
      // Get buffered image of source
      if (!(img instanceof BufferedImage)) {
        ImageProducer source = img.getSource();
        if (source == null) return false;
        img = Toolkit.getDefaultToolkit().createImage(source);
      }
      BufferedImage bImg = (BufferedImage) img;

      // Find translated bounds
      Point2D origin = new Point2D.Double(bImg.getMinX(), bImg.getMinY());
      Point2D pt =
          new Point2D.Double(bImg.getWidth() + bImg.getMinX(), bImg.getHeight() + bImg.getMinY());
      if (xform != null) {
        origin = xform.transform(origin, origin);
        pt = xform.transform(pt, pt);
      }

      // Create buffer and draw image
      createBuffer();

      Graphics2D g2d = (Graphics2D) buffer.getGraphics();
      g2d.setRenderingHints(this.getRenderingHints());
      g2d.drawImage(img, xform, obs);

      // Perform compositing
      rv =
          drawComposite(
              new Rectangle2D.Double(origin.getX(), origin.getY(), pt.getX(), pt.getY()), obs);
    }
    return rv;
  }
Example #3
0
  // ¸ù¾ÝͼƬ·¾¶£¬¶ÁȡͼƬÐÅÏ¢£¬´æ´¢µ½mapÖв¢·µ»Ø
  public static Map<String, Object> readImg(String path) {
    Map<String, Object> map = new HashMap<String, Object>();
    File file = new File(path);
    if (!file.exists()) {
      System.out.println("Ä¿±êͼƬ²»´æÔÚ");
      return null;
    }
    String fileName = file.getName();
    map.put("fileName", fileName);
    String formatType = fileName.substring(fileName.lastIndexOf(".") + 1);
    map.put("formatType", formatType);
    BufferedImage image = null;
    try {
      image = ImageIO.read(file);
    } catch (IOException e) {
      e.printStackTrace();
    }

    if (image == null) {
      System.out.println("ͼƬ¶Áȡʧ°Ü£¬Çë¼ì²éͼƬ");
      return null;
    }

    int imageType = image.getType();
    map.put("imageType", imageType);

    int width = image.getWidth();
    int height = image.getHeight();
    map.put("width", width);
    map.put("height", height);

    int minx = image.getMinX();
    int miny = image.getMinY();
    map.put("minx", minx);
    map.put("miny", miny);

    int offset = 0;
    int scansize = width;

    int[] pixelArray = new int[offset + (height - miny) * scansize];
    image.getRGB(minx, miny, width, height, pixelArray, offset, scansize);

    map.put("pixelArray", pixelArray);

    return map;
  }
Example #4
0
 /**
  * Returns average color of picture
  *
  * @return
  */
 public static Color getAverageColor(BufferedImage bi) {
   int index = 0;
   long redSum = 0;
   long greenSum = 0;
   long blueSum = 0;
   for (int x = bi.getMinX(); x < bi.getWidth(); x += 4) {
     for (int y = bi.getMinY(); y < bi.getHeight(); y += 4) {
       int rgb = bi.getRGB(x, y);
       Color c = new Color(rgb);
       int red = c.getRed();
       redSum += red;
       int green = c.getGreen();
       greenSum += green;
       int blue = c.getBlue();
       blueSum += blue;
       c = new Color(red, green, blue);
       bi.setRGB(x, y, c.getRGB());
       index++;
     }
   }
   return new Color(
       new Integer((int) (redSum / index)), (int) greenSum / index, (int) blueSum / index);
 }
  // <editor-fold defaultstate="collapsed" desc="Visualization">
  @Override
  protected void paintComponent(Graphics g) {
    final Graphics2D G2 = (Graphics2D) g.create();

    G2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    G2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
    G2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_NORMALIZE);
    G2.setRenderingHint(
        RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

    G2.translate(getInnerBounds().x, getInnerBounds().y);

    if (lcdBackgroundVisible) {
      G2.drawImage(lcdImage, 0, 0, null);
    }

    // Draw lcd text
    if (lcdColor == LcdColor.CUSTOM) {
      G2.setColor(customLcdForeground);
    } else {
      G2.setColor(lcdColor.TEXT_COLOR);
    }
    G2.setFont(lcdUnitFont);
    final double UNIT_STRING_WIDTH;
    if (lcdUnitStringVisible && !lcdUnitString.isEmpty()) {
      unitLayout = new TextLayout(lcdUnitString, G2.getFont(), RENDER_CONTEXT);
      UNIT_BOUNDARY.setFrame(unitLayout.getBounds());
      if (lcdTextVisible) {
        G2.drawString(
            lcdUnitString,
            (float)
                ((lcdImage.getWidth() - UNIT_BOUNDARY.getWidth()) - lcdImage.getHeight() * 0.15f),
            (lcdImage.getHeight() * 0.6f));
      }
      UNIT_STRING_WIDTH = UNIT_BOUNDARY.getWidth();
    } else {
      UNIT_STRING_WIDTH = 0;
    }

    // Draw value and oldValue
    switch (numberSystem) {
      case DEC:

      default:
        G2.setFont(lcdValueFont);
        valueLayout = new TextLayout(formatLcdValue(lcdValue), G2.getFont(), RENDER_CONTEXT);
        VALUE_BOUNDARY.setFrame(valueLayout.getBounds());
        if (lcdTextVisible) {
          G2.drawString(
              formatLcdValue(lcdValue),
              (float)
                  ((lcdImage.getMinX()
                      + (lcdImage.getWidth() - UNIT_STRING_WIDTH - VALUE_BOUNDARY.getWidth())
                      - lcdImage.getHeight() * 0.3)),
              (lcdImage.getHeight() * 0.6f));
        }

        G2.setFont(lcdFormerValueFont);
        oldValueLayout = new TextLayout(formatLcdValue(oldValue), G2.getFont(), RENDER_CONTEXT);
        OLD_VALUE_BOUNDARY.setFrame(oldValueLayout.getBounds());
        if (lcdTextVisible) {
          G2.drawString(
              formatLcdValue(oldValue),
              (float) ((lcdImage.getWidth() - OLD_VALUE_BOUNDARY.getWidth()) / 2f),
              (lcdImage.getHeight() * 0.9f));
        }
        break;

      case HEX:
        G2.setFont(lcdValueFont);
        valueLayout =
            new TextLayout(
                Integer.toHexString((int) lcdValue).toUpperCase(), G2.getFont(), RENDER_CONTEXT);
        VALUE_BOUNDARY.setFrame(valueLayout.getBounds());
        if (lcdTextVisible) {
          G2.drawString(
              Integer.toHexString((int) lcdValue).toUpperCase(),
              (float)
                  ((lcdImage.getMinX()
                      + (lcdImage.getWidth() - UNIT_STRING_WIDTH - VALUE_BOUNDARY.getWidth())
                      - lcdImage.getHeight() * 0.3)),
              (lcdImage.getHeight() * 0.6f));
        }

        G2.setFont(lcdFormerValueFont);
        oldValueLayout =
            new TextLayout(
                Integer.toHexString((int) oldValue).toUpperCase(), G2.getFont(), RENDER_CONTEXT);
        OLD_VALUE_BOUNDARY.setFrame(oldValueLayout.getBounds());
        if (lcdTextVisible) {
          G2.drawString(
              Integer.toHexString((int) oldValue).toUpperCase(),
              (float) ((lcdImage.getWidth() - OLD_VALUE_BOUNDARY.getWidth()) / 2f),
              (lcdImage.getHeight() * 0.9f));
        }
        break;

      case OCT:
        G2.setFont(lcdValueFont);
        valueLayout =
            new TextLayout(Integer.toOctalString((int) lcdValue), G2.getFont(), RENDER_CONTEXT);
        VALUE_BOUNDARY.setFrame(valueLayout.getBounds());
        if (lcdTextVisible) {
          G2.drawString(
              Integer.toOctalString((int) lcdValue),
              (float)
                  ((lcdImage.getMinX()
                      + (lcdImage.getWidth() - UNIT_STRING_WIDTH - VALUE_BOUNDARY.getWidth())
                      - lcdImage.getHeight() * 0.3)),
              (lcdImage.getHeight() * 0.6f));
        }

        G2.setFont(lcdFormerValueFont);
        oldValueLayout =
            new TextLayout(Integer.toOctalString((int) oldValue), G2.getFont(), RENDER_CONTEXT);
        OLD_VALUE_BOUNDARY.setFrame(oldValueLayout.getBounds());
        if (lcdTextVisible) {
          G2.drawString(
              Integer.toOctalString((int) oldValue),
              (float) ((lcdImage.getWidth() - OLD_VALUE_BOUNDARY.getWidth()) / 2f),
              (lcdImage.getHeight() * 0.9f));
        }
        break;
    }

    // Draw lcd info string
    if (!lcdInfoString.isEmpty()) {
      G2.setFont(lcdInfoFont);
      infoLayout = new TextLayout(lcdInfoString, G2.getFont(), RENDER_CONTEXT);
      INFO_BOUNDARY.setFrame(infoLayout.getBounds());
      G2.drawString(lcdInfoString, 5f, (float) INFO_BOUNDARY.getHeight() + 5f);
    }

    // Draw lcd threshold indicator
    if (numberSystem == NumberSystem.DEC && lcdThresholdVisible && lcdValue >= lcdThreshold) {
      if (!lcdThresholdBehaviourInverted) {
        if (lcdValue >= lcdThreshold) {
          G2.drawImage(lcdThresholdImage, 5, getHeight() - lcdThresholdImage.getHeight() - 5, null);
        }
      } else {
        if (lcdValue <= lcdThreshold) {
          G2.drawImage(lcdThresholdImage, 5, getHeight() - lcdThresholdImage.getHeight() - 5, null);
        }
      }
    }

    if (glowVisible && glowing) {
      G2.drawImage(glowImageOn, 0, 0, null);
    }

    if (!isEnabled()) {
      G2.setColor(DISABLED_COLOR);
      G2.fill(disabledShape);
    }

    G2.translate(-getInnerBounds().x, -getInnerBounds().y);

    G2.dispose();
  }
  private boolean drawComposite(Rectangle2D bounds, ImageObserver observer) {
    // Clip source to visible areas that need updating
    Rectangle2D clip = this.getClipBounds();
    Rectangle2D.intersect(bounds, clip, bounds);
    clip =
        new Rectangle(
            buffer.getMinX(), buffer.getMinY(),
            buffer.getWidth(), buffer.getHeight());
    Rectangle2D.intersect(bounds, clip, bounds);

    BufferedImage buffer2 = buffer;
    if (!bounds.equals(buffer2.getRaster().getBounds()))
      buffer2 =
          buffer2.getSubimage(
              (int) bounds.getX(),
              (int) bounds.getY(),
              (int) bounds.getWidth(),
              (int) bounds.getHeight());

    // Get destination clip to bounds
    double[] points =
        new double[] {
          bounds.getX(), bounds.getY(),
          bounds.getMaxX(), bounds.getMaxY()
        };
    transform.transform(points, 0, points, 0, 2);

    Rectangle2D deviceBounds =
        new Rectangle2D.Double(points[0], points[1], points[2] - points[0], points[3] - points[1]);

    Rectangle2D.intersect(deviceBounds, this.getClipInDevSpace(), deviceBounds);

    // Get current image on the component
    GtkImage img = grab(component);
    Graphics gr = componentBuffer.createGraphics();
    gr.drawImage(img, 0, 0, null);
    gr.dispose();

    BufferedImage cBuffer = componentBuffer;
    if (!deviceBounds.equals(cBuffer.getRaster().getBounds()))
      cBuffer =
          cBuffer.getSubimage(
              (int) deviceBounds.getX(),
              (int) deviceBounds.getY(),
              (int) deviceBounds.getWidth(),
              (int) deviceBounds.getHeight());

    // Perform actual composite operation
    compCtx.compose(buffer2.getRaster(), cBuffer.getRaster(), cBuffer.getRaster());

    // This MUST call directly into the "action" method in CairoGraphics2D,
    // not one of the wrappers, to ensure that the composite isn't processed
    // more than once!
    boolean rv =
        super.drawImage(
            cBuffer,
            AffineTransform.getTranslateInstance(bounds.getX(), bounds.getY()),
            null,
            null);
    return rv;
  }
Example #7
0
 @Override
 public Rectangle2D getBounds2D() {
   return new Rectangle2D.Double(
       bImage.getMinX(), bImage.getMinY(), bImage.getWidth(), bImage.getHeight());
 }