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

relj7zay  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(397)

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;
}

我做错什么了?

wbgh16ku

wbgh16ku1#

最初我只是想说use.getscaledinstance(),但我读了一篇关于java映像和缓冲映像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;
}

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

相关问题