Use new scaling API
git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/trunk@482 632fc199-4ca6-4c93-a231-07263d6284db
diff --git a/java/TJExample.java b/java/TJExample.java
index 713f840..8913c72 100644
--- a/java/TJExample.java
+++ b/java/TJExample.java
@@ -40,14 +40,23 @@
public static final String classname = new TJExample().getClass().getName();
- private static void usage() {
+ private static void usage() throws Exception {
System.out.println("\nUSAGE: java " + classname + " <Input file> <Output file> [options]\n");
System.out.println("Input and output files can be any image format that the Java Image I/O");
System.out.println("extensions understand. If either filename ends in a .jpg extension, then");
System.out.println("TurboJPEG will be used to compress or decompress the file.\n");
System.out.println("Options:\n");
- System.out.println("-scale 1/N = if the input image is a JPEG file, scale the width/height of the");
- System.out.println(" output image by a factor of 1/N (N = 1, 2, 4, or 8}\n");
+ System.out.println("-scale M/N = if the input image is a JPEG file, scale the width/height of the");
+ System.out.print(" output image by a factor of M/N (M/N = ");
+ for(int i = 0; i < sf.length; i++) {
+ System.out.print(sf[i].num + "/" + sf[i].denom);
+ if(sf.length == 2 && i != sf.length - 1) System.out.print(" or ");
+ else if(sf.length > 2) {
+ if(i != sf.length - 1) System.out.print(", ");
+ if(i == sf.length - 2) System.out.print("or ");
+ }
+ }
+ System.out.println(")\n");
System.out.println("-samp <444|422|420|gray> = If the output image is a JPEG file, this specifies");
System.out.println(" the level of chrominance subsampling to use when");
System.out.println(" recompressing it. Default is to use the same level");
@@ -68,11 +77,13 @@
try {
+ sf = TJ.getScalingFactors();
+
if(argv.length < 2) {
usage();
}
- int scaleFactor = 1;
+ int scaleNum = 1, scaleDenom = 1;
String inFormat = "jpg", outFormat = "jpg";
int outSubsamp = -1, outQual = 95;
@@ -81,14 +92,22 @@
if(argv[i].length() < 2) continue;
if(argv[i].length() > 2
&& argv[i].substring(0, 3).equalsIgnoreCase("-sc")) {
+ int match = 0;
if(i < argv.length - 1) {
+ int temp1 = 0, temp2 = 0;
String[] scaleArg = argv[++i].split("/");
- if(scaleArg.length != 2 || Integer.parseInt(scaleArg[0]) != 1
- || (scaleFactor = Integer.parseInt(scaleArg[1])) < 1
- || scaleFactor > 8 || (scaleFactor & (scaleFactor - 1)) != 0)
- usage();
+ if(scaleArg.length == 2) {
+ temp1 = Integer.parseInt(scaleArg[0]);
+ temp2 = Integer.parseInt(scaleArg[1]);
+ for(int j = 0; j < sf.length; j++) {
+ if(temp1 == sf[j].num && temp2 == sf[j].denom) {
+ scaleNum = temp1; scaleDenom = temp2;
+ match = 1; break;
+ }
+ }
+ }
}
- else usage();
+ if(match != 1) usage();
}
if(argv[i].substring(0, 2).equalsIgnoreCase("-h")
|| argv[i].equalsIgnoreCase("-?"))
@@ -145,9 +164,9 @@
+ " pixels, " + sampName[inSubsamp] + " subsampling");
if(outSubsamp < 0) outSubsamp = inSubsamp;
- if(scaleFactor != 1) {
- width = (width + scaleFactor - 1) / scaleFactor;
- height = (height + scaleFactor - 1) / scaleFactor;
+ if(scaleNum != 1 || scaleDenom != 1) {
+ width = (width * scaleNum + scaleDenom - 1) / scaleDenom;
+ height = (height * scaleNum + scaleDenom - 1) / scaleDenom;
}
if(!outFormat.equalsIgnoreCase("jpg"))
@@ -203,4 +222,5 @@
}
}
+ static TJ.ScalingFactor sf [] = null;
};