Improve icon scaling for 1.25x / 1.5x / 1.75x scale factors
This commit is contained in:
parent
e2a9d51df6
commit
fc780f6ebb
2
ivy.xml
2
ivy.xml
|
@ -29,7 +29,7 @@
|
|||
<dependency rev="3.0.0" org="com.googlecode.lanterna" name="lanterna" />
|
||||
<dependency rev="2.11.0" org="com.drewnoakes" name="metadata-extractor" />
|
||||
<dependency rev="1.59" org="org.bouncycastle" name="bcprov-jdk15on" />
|
||||
|
||||
<dependency rev="4.2" org="org.imgscalr" name="imgscalr-lib" />
|
||||
|
||||
<!-- FileBot Scripting -->
|
||||
<dependency rev="1.10.3" org="org.apache.ant" name="ant" />
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
def destfile = { r ->
|
||||
ant.project.properties.'dir.dist' + '/lib/' + r.file.name.replaceAll(/.jdk15on|.java16/, '').toLowerCase()
|
||||
ant.project.properties.'dir.dist' + '/lib/' + r.file.name.replaceAll(/.lib|.jdk15on|.java16/, '').toLowerCase()
|
||||
}
|
||||
|
||||
project.references.'jar.classpath'.each { r ->
|
||||
|
|
|
@ -47,6 +47,7 @@ ivy/jar/javax.mail.jar
|
|||
ivy/jar/activation.jar
|
||||
ivy/jar/bcprov-jdk15on.jar
|
||||
ivy/jar/bcpg-jdk15on.jar
|
||||
ivy/jar/imgscalr-lib.jar
|
||||
ivy/bundle/args4j.jar
|
||||
ivy/bundle/json-io.jar
|
||||
ivy/bundle/guava.jar
|
||||
|
|
|
@ -3,9 +3,7 @@ package net.filebot;
|
|||
import static java.util.Collections.*;
|
||||
import static java.util.stream.Collectors.*;
|
||||
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Image;
|
||||
import java.awt.RenderingHints;
|
||||
import java.awt.Toolkit;
|
||||
import java.awt.image.BaseMultiResolutionImage;
|
||||
import java.awt.image.BufferedImage;
|
||||
|
@ -21,6 +19,10 @@ import javax.imageio.ImageIO;
|
|||
import javax.swing.Icon;
|
||||
import javax.swing.ImageIcon;
|
||||
|
||||
import org.imgscalr.Scalr;
|
||||
import org.imgscalr.Scalr.Method;
|
||||
import org.imgscalr.Scalr.Mode;
|
||||
|
||||
import net.filebot.util.SystemProperty;
|
||||
|
||||
public final class ResourceManager {
|
||||
|
@ -32,7 +34,7 @@ public final class ResourceManager {
|
|||
// load image
|
||||
URL[] resource = getMultiResolutionImageResource(i);
|
||||
if (resource.length > 0) {
|
||||
return getMultiResolutionIcon(resource);
|
||||
return new ImageIcon(getMultiResolutionImage(resource));
|
||||
}
|
||||
|
||||
// default image
|
||||
|
@ -58,24 +60,18 @@ public final class ResourceManager {
|
|||
for (URL r : resource) {
|
||||
image.add(ImageIO.read(r));
|
||||
}
|
||||
return new BaseMultiResolutionImage(image.toArray(new Image[0]));
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private static Icon getMultiResolutionIcon(URL[] resource) {
|
||||
if (PRIMARY_SCALE_FACTOR == 1 || PRIMARY_SCALE_FACTOR == 2) {
|
||||
return new ImageIcon(getMultiResolutionImage(resource));
|
||||
}
|
||||
|
||||
try {
|
||||
BufferedImage[] image = new BufferedImage[resource.length + 1];
|
||||
for (int i = 0; i < resource.length; i++) {
|
||||
image[i + 1] = ImageIO.read(resource[i]);
|
||||
// Windows 10: use @2x image for non-integer scale factors 1.25 / 1.5 / 1.75
|
||||
if (PRIMARY_SCALE_FACTOR != 1 && PRIMARY_SCALE_FACTOR != 2) {
|
||||
BufferedImage hidpi = image.get(image.size() - 1);
|
||||
if (PRIMARY_SCALE_FACTOR < 2) {
|
||||
image.add(1, scale(PRIMARY_SCALE_FACTOR, hidpi));
|
||||
} else {
|
||||
image.add(scale(PRIMARY_SCALE_FACTOR, hidpi));
|
||||
}
|
||||
}
|
||||
image[0] = scale(PRIMARY_SCALE_FACTOR, image[image.length - 1]);
|
||||
return new ImageIcon(new BaseMultiResolutionImage(1, image));
|
||||
|
||||
return new BaseMultiResolutionImage(image.toArray(new Image[0]));
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
@ -94,19 +90,7 @@ public final class ResourceManager {
|
|||
private static BufferedImage scale(float scale, BufferedImage image) {
|
||||
int w = (int) (scale * image.getWidth());
|
||||
int h = (int) (scale * image.getHeight());
|
||||
|
||||
BufferedImage scaledImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
|
||||
Graphics2D g2d = scaledImage.createGraphics();
|
||||
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
|
||||
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
||||
g2d.drawImage(image, 0, 0, w, h, 0, 0, image.getWidth(), image.getHeight(), null);
|
||||
g2d.dispose();
|
||||
|
||||
return scaledImage;
|
||||
}
|
||||
|
||||
private ResourceManager() {
|
||||
throw new UnsupportedOperationException();
|
||||
return Scalr.resize(image, Method.ULTRA_QUALITY, Mode.FIT_TO_WIDTH, w, h, Scalr.OP_ANTIALIAS);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue