如何重新缩放二进制字符图像?

时间:2013-06-06 08:36:22

标签: java image-processing character

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

我尝试用Java中的bicubic算法调整字符图像的大小。 但正如你所看到的那样,图像连接已经破裂...... 我刚刚制作了代码..

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;
}
我在做错了什么?

1 个答案:

答案 0 :(得分: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)图像。最好将重新缩放的图像设置为与重新缩放所基于的图像相同的类型,并使用转换方法更改其类型。