0

我正在使用一个名为Image4j的库来加载一个 ico 文件,从列表中选择一个图像,对其进行缩放(如果需要)并将其作为 ImageIcon 放入 JLabel 中。

该库有一个方法read(File icoFile),它返回List<BufferedImage>ico 文件中包含的所有图像的列表。

我想要做的是从列表中快速选择最适合标签大小的图像。标签和 ico 图像都是方形的。

我想出了最幼稚的方法,但我怀疑有更快的方法。我会接受这个,但我的程序会经常执行这个例程,所以我希望这部分尽可能高效。

public class IconUtil() {

    private final List<BufferedImage> list;

    public IconUtil(List<BufferedImage> list) {
        this.list = list;
    }

    public BufferedImage getBestFit(int sizeToFit) {
        int indexOfBestFit = 0; // assume it's the first image
        int bestMargin = Math.abs(list.get(0).getWidth() - sizeToFit);
        int margin;

        for(int i = 1; i < list.size(); i++) {
            margin = Math.abs(list.get(i).getWidth() - sizeToFit);

            if(margin < bestMargin) {
                bestMargin = margin;
                indexOfBestFit = i;
            }
        }

        return list[indexOfBestFit];
    }

}

按宽度比较图像的选择是任意的,因为它们都是正方形的。

此外,由于选择最佳拟合的主要原因是尝试保持图像的质量,这种方法是否应该丢弃任何小于目标尺寸的图像?如果是这样,那将如何改变算法?

我在 Java 中重新缩放图像的经验很少。甚至有必要找到尺寸最接近的匹配吗?也许即使原始文件更大,也有办法在不损失太多质量的情况下重新缩放?

4

0 回答 0