我正在努力扩展"正常" 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