Проблема с уменьшением масштаба изображения
Мне нужно изменить размер от исходного изображения до целевого изображения, это то, что я уже сделал, используя следующий код
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);