0

http://cafefiles.naver.net/20130606_179/rise1925_1370463189365uKV60_PNG/%C1%A6%B8%F1_%BE%F8%C0%BD.png

我尝试通过 Java 中的双三次算法调整字符图像的大小。但是正如您所看到的,它已链接,图像的连接性已损坏...我刚刚编写了代码..

public BufferedImage scaleImage(BufferedImage img, int width, int height,
        Color background) {

    BufferedImage newImage = new BufferedImage(width, height,
            BufferedImage.TYPE_BYTE_BINARY);

    Graphics2D g = newImage.createGraphics();

    try {
        g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
                RenderingHints.VALUE_INTERPOLATION_BICUBIC); 
        //g.setBackground(background);
        //g.setColor(Color.BLACK);
        g.clearRect(0, 0, width, height);
        g.drawImage(img, 0, 0, width, height, this);

    } finally {
        g.dispose();
    }
return newImage;
}

我究竟做错了什么?

4

1 回答 1

0

最初我只是想说使用 .getScaledInstance(),但我读了一篇关于 java Image 和 Buffered Image api 良好实践的文章。

https://today.java.net/pub/a/today/2007/04/03/perils-of-image-getscaledinstance.html

这是我认为你需要的源代码

public static BufferedImage scaleImage(BufferedImage img, int width, int height) {

    BufferedImage newImage = new BufferedImage(width, height,img.getType());

    Graphics2D g = newImage.createGraphics();

    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
         RenderingHints.VALUE_INTERPOLATION_BICUBIC); 

    g.clearRect(0, 0, width, height);
    g.drawImage(img, 0, 0, width, height, null);
    g.dispose();

    return newImage;
}

您将新调整大小的图像设置为二进制(读取为黑白,即 1 和 0)图像。始终将重新缩放的图像设置为与重新缩放所基于的图像相同的类型并使用转换方法更改其类型是一种很好的做法。

于 2013-06-10T06:21:14.587 回答