package uk.ac.diamond.scisoft.analysis.processing.operations.image;
import org.eclipse.dawnsci.analysis.api.image.IImageTransform;
import org.eclipse.dawnsci.analysis.api.processing.OperationRank;
import org.eclipse.january.IMonitor;
import org.eclipse.january.dataset.IDataset;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import uk.ac.diamond.scisoft.analysis.processing.operations.image.RotateImageModel.AngleUnit;
public class RotateImageOperation extends AbstractSimpleImageOperation<RotateImageModel> {
private final Logger logger = LoggerFactory.getLogger(RotateImageOperation.class);
@Override
public String getId() {
return "uk.ac.diamond.scisoft.analysis.processing.operations.RotateImageOperation";
}
@Override
public IDataset processImage(IDataset dataset, IMonitor monitor) {
IImageTransform service = getImageTransformService();
double angle = ((RotateImageModel)model).getAngle();
AngleUnit unit = ((RotateImageModel)model).getUnit();
boolean resize = ((RotateImageModel)model).isResize();
IDataset rotated = null;
if (unit == AngleUnit.RADIAN)
angle = Math.toDegrees(angle);
try {
rotated = service.rotate(dataset, angle, !resize);
} catch (Exception e) {
logger.error("An error occured while rotating:", e);
}
return rotated;
}
@Override
public OperationRank getInputRank() {
return OperationRank.TWO;
}
@Override
public OperationRank getOutputRank() {
return OperationRank.TWO;
}
}