Finish TIFFUtilities.applyOrientation

This commit is contained in:
Schmidor 2015-12-16 23:18:09 +01:00
parent ad0d265f4f
commit 8c2af2c3c5

View File

@ -243,57 +243,73 @@ public class TIFFUtilities {
} }
public static BufferedImage applyOrientation(BufferedImage input, int orientation) { public static BufferedImage applyOrientation(BufferedImage input, int orientation) {
//TODO: Translations are currently off for non quadratic images
boolean flipExtends = false; boolean flipExtends = false;
AffineTransform transform = AffineTransform.getTranslateInstance(input.getWidth() / 2, input.getHeight() / 2); int w = input.getWidth();
int h = input.getHeight();
double cW = w / 2.0;
double cH = h / 2.0;
AffineTransform orientationTransform = new AffineTransform();
switch (orientation) { switch (orientation) {
case TIFFBaseline.ORIENTATION_TOPLEFT: case TIFFBaseline.ORIENTATION_TOPLEFT:
// normal // normal
return input; return input;
case TIFFExtension.ORIENTATION_TOPRIGHT: case TIFFExtension.ORIENTATION_TOPRIGHT:
// flipped vertically // flipped vertically
transform.scale(-1, 1); orientationTransform.translate(cW, cH);
orientationTransform.scale(-1, 1);
orientationTransform.translate(-cW, -cH);
break; break;
case TIFFExtension.ORIENTATION_BOTRIGHT: case TIFFExtension.ORIENTATION_BOTRIGHT:
// rotated 180<EFBFBD> // rotated 180<EFBFBD>
transform.quadrantRotate(2); orientationTransform.quadrantRotate(2, cW, cH);
break; break;
case TIFFExtension.ORIENTATION_BOTLEFT: case TIFFExtension.ORIENTATION_BOTLEFT:
// flipped horizontally // flipped horizontally
transform.scale(1, -1); orientationTransform.translate(cW, cH);
orientationTransform.scale(1, -1);
orientationTransform.translate(-cW, -cH);
break; break;
case TIFFExtension.ORIENTATION_LEFTTOP: case TIFFExtension.ORIENTATION_LEFTTOP:
transform.scale(1, -1); orientationTransform.translate(cW, cH);
transform.quadrantRotate(1); orientationTransform.scale(-1, 1);
orientationTransform.quadrantRotate(1);
orientationTransform.translate(-cW, -cH);
flipExtends = true; flipExtends = true;
break; break;
case TIFFExtension.ORIENTATION_RIGHTTOP: case TIFFExtension.ORIENTATION_RIGHTTOP:
// rotated 90<EFBFBD> // rotated 90<EFBFBD>
transform.quadrantRotate(1); orientationTransform.quadrantRotate(1, cW, cH);
flipExtends = true; flipExtends = true;
break; break;
case TIFFExtension.ORIENTATION_RIGHTBOT: case TIFFExtension.ORIENTATION_RIGHTBOT:
transform.scale(-1, 1); orientationTransform.translate(cW, cH);
transform.quadrantRotate(1); orientationTransform.scale(1, -1);
orientationTransform.quadrantRotate(1);
orientationTransform.translate(-cW, -cH);
flipExtends = true; flipExtends = true;
break; break;
case TIFFExtension.ORIENTATION_LEFTBOT: case TIFFExtension.ORIENTATION_LEFTBOT:
// rotated 270<EFBFBD> // rotated 270<EFBFBD>
transform.quadrantRotate(3); orientationTransform.quadrantRotate(3, cW, cH);
flipExtends = true; flipExtends = true;
break; break;
} }
int w = input.getWidth(); int newW, newH;
int h = input.getHeight();
if (flipExtends) { if (flipExtends) {
w = input.getHeight(); newW = h;
h = input.getWidth(); newH = w;
}
else {
newW = w;
newH = h;
} }
BufferedImage output = new BufferedImage(w, h, input.getType()); AffineTransform transform = AffineTransform.getTranslateInstance((newW - w) / 2.0, (newH - h) / 2.0);
transform.translate(-h / 2, -w / 2); transform.concatenate(orientationTransform);
BufferedImage output = new BufferedImage(newW, newH, input.getType());
((Graphics2D) output.getGraphics()).drawImage(input, transform, null); ((Graphics2D) output.getGraphics()).drawImage(input, transform, null);
return output; return output;