mirror of
https://github.com/haraldk/TwelveMonkeys.git
synced 2025-08-03 03:25:28 -04:00
Finish TIFFUtilities.applyOrientation
This commit is contained in:
parent
ad0d265f4f
commit
8c2af2c3c5
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user