Проблема с уменьшением масштаба изображения

Мне нужно изменить размер от исходного изображения до целевого изображения, это то, что я уже сделал, используя следующий код

public static BufferedImage getScaledSampledFilteredImage(
            BufferedImage img, int targetWidth, int targetHeight,
            boolean higherQuality) {

        ResampleOp resampleOp = new ResampleOp(targetWidth, targetHeight);
        resampleOp.setUnsharpenMask(AdvancedResizeOp.UnsharpenMask.VerySharp);
        resampleOp.setUnsharpenMask(AdvancedResizeOp.UnsharpenMask.Soft);
        BufferedImage rescaledImage = resampleOp.filter(img, null);

        return rescaledImage;
    }

и я использую

Библиотека масштабирования изображения

но, как вы можете видеть здесь, я получаю пунктирную линию, а не непрерывную линию.

Кто-нибудь может направить меня, как я могу достичь своей цели?

Спасибо, Михир Парех

Исходное изображение

целевое изображение

3 ответа

Я не знаю, будет ли это полезно для вас, но я использую эту функцию, когда хочу изменить масштаб моих изображений:

public BufferedImage scaleImage(int WIDTH, int HEIGHT, String filename) {
        BufferedImage bi = null;
        try {
            ImageIcon ii = new ImageIcon(filename);//path to image
            bi = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
            Graphics2D g2d = (Graphics2D) bi.createGraphics();
            g2d.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY));
            g2d.drawImage(ii.getImage(), 0, 0, WIDTH, HEIGHT, null);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return bi;
    }

Надеюсь, это поможет вам

Попробуйте один из них. Настройте по мере необходимости, чтобы удовлетворить ваши потребности.

public static Image getScaled(final Image img, final int w, final int h) {
    return img.getScaledInstance(w, h, java.awt.Image.SCALE_SMOOTH);
}

public static BufferedImage getScaled(final BufferedImage img, final int w, final int h) {
    final Image image = img.getScaledInstance(w, h, java.awt.Image.SCALE_SMOOTH);
    final BufferedImage bufferedImage = new BufferedImage(w, h, img.getType());
    bufferedImage.getGraphics().drawImage(image, 0, 0, null);
    return bufferedImage;
}

Вам нужно установить антиалиасинг:

clearBuffer = new BufferedImage(img.getWidth(null),
                            img.getHeight(null), BufferedImage.TYPE_INT_RGB);
            Graphics2D graphics = clearBuffer.createGraphics();
            graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
                RenderingHints.VALUE_INTERPOLATION_BICUBIC);
            graphics.setRenderingHint(RenderingHints.KEY_RENDERING,
                RenderingHints.VALUE_RENDER_QUALITY);
            graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
            graphics.drawImage(img, 0, 0, null);
Другие вопросы по тегам