示例#1
0
  public boolean prepareImage(FileSystem fs) throws Exception {
    boolean result = false;
    if (isImage()) {
      if (data == null || !(data instanceof Image)) {
        String fn = fileName.toLowerCase();
        if (fn.endsWith(".bmp")) {

          // Old edu.xtec.jclic.misc.Bmp replaced by image4j
          // Bmp bmp=new Bmp(fs.getInputStream(fileName));
          // setData(bmp.getImage());

          BufferedImage img = BMPDecoder.read(fs.getInputStream(fileName));
          setData(Toolkit.getDefaultToolkit().createImage(img.getSource()));
        } else if (fn.endsWith(".ico")) {
          java.util.List list = ICODecoder.read(fs.getInputStream(fileName));
          int maxs = 0;
          BufferedImage img = null;
          int listSize = list.size();
          for (int i = 0; i < listSize; i++) {
            BufferedImage imgtmp = (BufferedImage) list.get(i);
            int s = imgtmp.getWidth() * imgtmp.getHeight();
            if (s >= maxs) {
              img = imgtmp;
              maxs = s;
            }
          }
          if (img != null) setData(Toolkit.getDefaultToolkit().createImage(img.getSource()));
        } else setData(fs.getImageFile(fileName));
      }
      result = true;
    }
    return result;
  }
示例#2
0
 /**
  * イメージを設定します。
  *
  * @param image イメージ
  */
 public void setImage(BufferedImage image) {
   this.image = image;
   setSize(image.getWidth(), image.getHeight());
   Toolkit tk = Toolkit.getDefaultToolkit();
   ChromakeyImageFilter chromakey = new ChromakeyImageFilter(getBackground().getRGB());
   img = tk.createImage(new FilteredImageSource(image.getSource(), chromakey));
 }
示例#3
0
  /* (non-Javadoc)
   * @see java.awt.image.BufferedImageOp#filter(java.awt.image.BufferedImage, java.awt.image.BufferedImage)
   */
  public BufferedImage filter(BufferedImage src, BufferedImage dst) {
    if (src == null) {
      throw new NullPointerException("src image is null");
    }
    if (src == dst) {
      throw new IllegalArgumentException("src image cannot be the " + "same as the dst image");
    }

    boolean needToConvert = false;
    ColorModel srcCM = src.getColorModel();
    ColorModel dstCM;
    BufferedImage origDst = dst;

    if (srcCM instanceof IndexColorModel) {
      IndexColorModel icm = (IndexColorModel) srcCM;
      src = icm.convertToIntDiscrete(src.getRaster(), false);
      srcCM = src.getColorModel();
    }
    if (dst == null) {
      dst = createCompatibleDestImage(src, null);
      dstCM = srcCM;
      origDst = dst;
    } else {
      dstCM = dst.getColorModel();
      if (srcCM.getColorSpace().getType() != dstCM.getColorSpace().getType()) {
        needToConvert = true;
        dst = createCompatibleDestImage(src, null);
        dstCM = dst.getColorModel();
      } else if (dstCM instanceof IndexColorModel) {
        dst = createCompatibleDestImage(src, null);
        dstCM = dst.getColorModel();
      }
    }

    java.awt.image.CropImageFilter cropfilter =
        new java.awt.image.CropImageFilter(region.x, region.y, region.width, region.height);
    Image returnImage =
        Toolkit.getDefaultToolkit()
            .createImage(new java.awt.image.FilteredImageSource(src.getSource(), cropfilter));
    dst = ImageConverter.convertImage(returnImage);
    origDst = dst;

    if (needToConvert) {
      ColorConvertOp ccop = new ColorConvertOp(hints);
      ccop.filter(dst, origDst);
    } else if (origDst != dst) {
      java.awt.Graphics2D g2 = origDst.createGraphics();
      try {
        g2.drawImage(dst, 0, 0, null);
      } finally {
        g2.dispose();
      }
    }

    return origDst;
  }
  /**
   * This method makes the color yellow transparent. It allows for images to overlap without fully
   * covering eachother
   *
   * @param im The image to be made transparent
   * @return The image with transparency
   */
  public Image makeColorTransparent(BufferedImage im) {
    ImageFilter filter =
        new RGBImageFilter() {
          public int markerRGB = Color.YELLOW.getRGB() | 0xFF000000;

          public final int filterRGB(int x, int y, int rgb) {
            if ((rgb | 0xFF000000) == markerRGB) {
              return 0x00FFFFFF & rgb;
            } else {
              return rgb;
            }
          }
        };
    ImageProducer ip = new FilteredImageSource(im.getSource(), filter);
    return Toolkit.getDefaultToolkit().createImage(ip);
  }
  private Image invert(Image src) {
    BufferedImage biSrc = toBufferedImage(src);

    BufferedImage biDst =
        new BufferedImage(biSrc.getWidth(), biSrc.getHeight(), BufferedImage.TYPE_INT_ARGB_PRE);

    byte invert[] = new byte[256];
    for (int j = 0; j < 256; j++) {
      invert[j] = (byte) (255 - j);
    }
    byte[][] ftable = {invert};
    LookupOp lo = new LookupOp(new ByteLookupTable(0, ftable), null);
    lo.filter(biSrc, biDst);

    return Toolkit.getDefaultToolkit().createImage(biDst.getSource());
  }
  /**
   * Makes a transparent image of the given dimensions.
   *
   * @param width the image width
   * @param height the image height
   * @return transparent image
   */
  public static BufferedImage makeTransparentImage(final int width, final int height) {
    // Create an image with the given dimension
    final BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

    // Now filter the image to make all pixels transparent
    final ImageFilter filter = new TransparentImageFilter();
    final ImageProducer ip = new FilteredImageSource(img.getSource(), filter);
    final Image image = Toolkit.getDefaultToolkit().createImage(ip);

    // Write the resulting image in the buffered image to return
    final BufferedImage bufferedImage = new BufferedImage(width, height, img.getType());
    final Graphics graphics = bufferedImage.createGraphics();
    graphics.drawImage(image, 0, 0, null);
    graphics.dispose();

    return bufferedImage;
  }
示例#7
0
文件: IconIO.java 项目: munix/jdget
  public static BufferedImage colorRangeToTransparency(
      final BufferedImage image, final Color c1, final Color c2) {

    final int r1 = c1.getRed();
    final int g1 = c1.getGreen();
    final int b1 = c1.getBlue();
    final int r2 = c2.getRed();
    final int g2 = c2.getGreen();
    final int b2 = c2.getBlue();
    final ImageFilter filter =
        new RGBImageFilter() {
          @Override
          public final int filterRGB(final int x, final int y, final int rgb) {

            final int r = (rgb & 0xFF0000) >> 16;
            final int g = (rgb & 0xFF00) >> 8;
            final int b = rgb & 0xFF;
            if (r >= r1 && r <= r2 && g >= g1 && g <= g2 && b >= b1 && b <= b2) {
              // Set fully transparent but keep color
              // calculate a alpha value based on the distance between the
              // range borders and the pixel color
              final int dist =
                  (Math.abs(r - (r1 + r2) / 2)
                          + Math.abs(g - (g1 + g2) / 2)
                          + Math.abs(b - (b1 + b2) / 2))
                      * 2;

              return new Color(r, g, b, Math.min(255, dist)).getRGB();
            }

            return rgb;
          }
        };

    final ImageProducer ip = new FilteredImageSource(image.getSource(), filter);
    final Image img = Toolkit.getDefaultToolkit().createImage(ip);
    return IconIO.toBufferedImage(img);
  }
示例#8
0
 // BufferedImage 객체를 ImageIcon 로 변환한다. save 시 사용
 private ImageIcon toImageIcon(BufferedImage bufferedImage) { // 추가된 메소드
   return new ImageIcon(Toolkit.getDefaultToolkit().createImage(bufferedImage.getSource()));
 }
示例#9
0
  private void initUI() {

    solution.add(new Point(0, 0));
    solution.add(new Point(0, 1));
    solution.add(new Point(0, 2));
    solution.add(new Point(1, 0));
    solution.add(new Point(1, 1));
    solution.add(new Point(1, 2));
    solution.add(new Point(2, 0));
    solution.add(new Point(2, 1));
    solution.add(new Point(2, 2));
    solution.add(new Point(3, 0));
    solution.add(new Point(3, 1));
    solution.add(new Point(3, 2));

    buttons = new ArrayList<>();

    panel = new JPanel();
    panel.setBorder(BorderFactory.createLineBorder(Color.gray));
    panel.setLayout(new GridLayout(4, 3, 0, 0));

    try {
      source = loadImage();
      int h = getNewHeight(source.getWidth(), source.getHeight());
      resized = resizeImage(source, DESIRED_WIDTH, h, BufferedImage.TYPE_INT_ARGB);

    } catch (IOException ex) {
      Logger.getLogger(PuzzleSample.class.getName()).log(Level.SEVERE, null, ex);
    }

    width = resized.getWidth(null);
    height = resized.getHeight(null);

    add(panel, BorderLayout.CENTER);

    for (int i = 0; i < 4; i++) {

      for (int j = 0; j < 3; j++) {

        image =
            createImage(
                new FilteredImageSource(
                    resized.getSource(),
                    new CropImageFilter(j * width / 3, i * height / 4, (width / 3), height / 4)));
        MyButton button = new MyButton(image);
        button.putClientProperty("position", new Point(i, j));

        if (i == 3 && j == 2) {
          lastButton = new MyButton();
          lastButton.setBorderPainted(false);
          lastButton.setContentAreaFilled(false);
          lastButton.setLastButton();
          lastButton.putClientProperty("position", new Point(i, j));
        } else {
          buttons.add(button);
        }
      }
    }

    Collections.shuffle(buttons);
    buttons.add(lastButton);

    for (int i = 0; i < 12; i++) {

      MyButton btn = buttons.get(i);
      panel.add(btn);
      btn.setBorder(BorderFactory.createLineBorder(Color.gray));
      btn.addActionListener(new ClickAction());
    }

    pack();
    setTitle("Puzzle");
    setResizable(false);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
 public static Image toImage(BufferedImage bufferedImage) {
   return Toolkit.getDefaultToolkit().createImage(bufferedImage.getSource());
 }
示例#11
0
  private void estimateContentTabAreaBorderColor(
      PanePainter pane, int index, final Direction direction) {
    Dimension preSize = pane.getSize();

    reset(pane);

    pane.addTab(EMPTY_STRING, SizeIcon.EMPTY, getComponent());

    pane.setSelectedIndex(-1);

    Dimension paneSize = pane.getMinimumSize();

    if (direction.isHorizontal()) pane.setSize(paneSize.width, paneSize.height * 2);
    else pane.setSize(paneSize.width * 2, paneSize.height);

    pane.doValidation();

    Rectangle tabBounds = pane.getBoundsAt(0);

    BufferedImage img =
        new BufferedImage(pane.getWidth(), pane.getHeight(), BufferedImage.TYPE_INT_ARGB);

    int x = 0;
    int y = 0;

    if (direction == Direction.UP) {
      x = tabBounds.x + (tabBounds.width / 2);
      y = pane.getHeight() - contentInsets[index].top - contentInsets[index].bottom - 1;
    } else if (direction == Direction.DOWN) {
      x = tabBounds.x + (tabBounds.width / 2);
      y = contentInsets[index].top + contentInsets[index].bottom;
    } else if (direction == Direction.LEFT) {
      x = pane.getWidth() - contentInsets[index].left - contentInsets[index].right - 1;
      y = tabBounds.y + (tabBounds.height / 2);
    } else {
      x += contentInsets[index].left + contentInsets[index].right;
      y = tabBounds.y + (tabBounds.height / 2);
    }

    final int px = x;
    final int py = y;

    RGBImageFilter colorFilter =
        new RGBImageFilter() {
          @Override
          public int filterRGB(int x, int y, int rgb) {
            if (px == x && py == y) {
              int r = (rgb >> 16) & 0xff;
              int g = (rgb >> 8) & 0xff;
              int b = (rgb) & 0xff;
              int a = (rgb >> 24) & 0xff;
              contentTabAreaBorderColors[getDirectionIndex(direction.getOpposite())] =
                  new Color(r, g, b, a);
            }

            return rgb;
          }
        };

    FilteredImageSource source = new FilteredImageSource(img.getSource(), colorFilter);
    pane.paint(img.getGraphics());

    BufferedImage img2 =
        new BufferedImage(pane.getWidth(), pane.getHeight(), BufferedImage.TYPE_INT_ARGB);
    img2.getGraphics().drawImage(Toolkit.getDefaultToolkit().createImage(source), 0, 0, null);

    pane.setSize(preSize);

    pane.doValidation();
  }
示例#12
0
  public void process(String srcImageFile) {
    try {
      Image img;
      ImageFilter cropFilter;
      // 读取源图像
      BufferedImage bi = ImageIO.read(new File(srcImageFile));
      int srcWidth = bi.getWidth(); // 源图宽度
      int srcHeight = bi.getHeight(); // 源图高度

      int destLength = srcWidth > srcHeight ? srcHeight : srcWidth;
      int x = (srcWidth - destLength) / 2;
      int y = (srcHeight - destLength) / 2;
      logger.debug(
          String.format(
              "ImgUtil -----> picUrl: %s,srcWidth %d,srcHeight:%d",
              srcImageFile, srcWidth, srcHeight));

      cropFilter = new CropImageFilter(x, y, destLength, destLength);
      img =
          Toolkit.getDefaultToolkit()
              .createImage(new FilteredImageSource(bi.getSource(), cropFilter));

      BufferedImage tag = new BufferedImage(destLength, destLength, BufferedImage.TYPE_INT_RGB);
      Graphics g = tag.getGraphics();
      g.drawImage(img, 0, 0, null); // 绘制截取后的图
      g.dispose();

      logger.debug("ImgUtil -----> Cut finished");

      // 压缩
      for (String s : compressSizeList.keySet()) {
        int length = compressSizeList.get(s);
        // To Test
        Image tmpResult = tag.getScaledInstance(length, length, Image.SCALE_DEFAULT);
        BufferedImage mBufferedImage =
            new BufferedImage(length, length, BufferedImage.TYPE_INT_RGB);
        Graphics2D g2 = mBufferedImage.createGraphics();

        g2.drawImage(tmpResult, 0, 0, length, length, Color.white, null);
        g2.dispose();

        float[] kernelData2 = {
          -0.125f, -0.125f, -0.125f, -0.125f, 2, -0.125f, -0.125f, -0.125f, -0.125f
        };
        Kernel kernel = new Kernel(3, 3, kernelData2);
        ConvolveOp cOp = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);
        mBufferedImage = cOp.filter(mBufferedImage, null);

        String targetImageFile = getPictureSmallURL(srcImageFile, s);

        File target = new File(targetImageFile);
        File targetDir = target.getParentFile();
        if (!targetDir.exists()) targetDir.mkdirs();

        // 输出为文件
        FileOutputStream out = new FileOutputStream(targetImageFile);
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
        encoder.encode(mBufferedImage);
        out.close();
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }