将Java中的图像缩放到非常小的尺寸

时间:2016-08-31 08:13:46

标签: java image scaling

我正在努力扩展"正常" Java应用程序中的图像(如200 * 200px)到小尺寸(10 * 10px)。我必须处理的图像是字符。 它实际上工作得很好,问题是它与原始图像相比会使字符太厚。

例如,使用此图片:Letter

如果我将缩放后的图像转换为数字数组并显示它,它将会产生如下内容:

    *    
   ***   
  *****  
  ** **  
  *  **  
 ******  
 **  **  
 *** **  
 **  **  
     **  

我希望厚度为1而不是2,因为如果图片上的字符较小,则会在缩放后使其无法使用。

对于此图片:Smaller letter

这就是出现的结果:

   ** *  
   ***   
  ****   
  ****   
  ** *   
  ****   

如您所见,角色无法识别。

这是我的代码:

public BufferedImage rescaleImage(BufferedImage img, int targetWidth)
{        
    int type = (img.getTransparency() == Transparency.OPAQUE) ?
    BufferedImage.TYPE_INT_RGB : BufferedImage.TYPE_INT_ARGB;
    BufferedImage ret = (BufferedImage)img;
    int w = img.getWidth();

    do {
        if (w > targetWidth) {
            w /= 2;
            if (w < targetWidth) {
                w = targetWidth;
            }
        }

        BufferedImage tmp = new BufferedImage(w, w, type);
        Graphics2D g2 = tmp.createGraphics();
        g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
        g2.drawImage(ret, 0, 0, w, w, null);
        g2.dispose();

        ret = tmp;
    } while (w != targetWidth);

    return ret;
}

我在setRenderingHint方法中尝试了不同的参数,但我总是得到一个太粗或太细的字符(一些像素消失)。

你知道我怎么解决这个问题吗?

谢谢!

LeChocdesGitans

0 个答案:

没有答案