diff --git a/apps/client/src/main/java/io/github/francwhite/raros/client/controller/RobotController.java b/apps/client/src/main/java/io/github/francwhite/raros/client/controller/RobotController.java index 20352d3..2089e6b 100644 --- a/apps/client/src/main/java/io/github/francwhite/raros/client/controller/RobotController.java +++ b/apps/client/src/main/java/io/github/francwhite/raros/client/controller/RobotController.java @@ -309,7 +309,7 @@ public interface RobotController { /** * Captures an image from the camera. * - * @return String The captured image as a base64 encoded string. + * @return The path to the captured image. */ String captureImage(); @@ -318,7 +318,7 @@ public interface RobotController { * * @param angleHorizontal The horizontal angle to rotate the camera to. The angle must be between -90 and 90. * @param angleVertical The vertical angle to rotate the camera to. The angle must be between -90 and 90. - * @return String The captured image as a base64 encoded string. + * @return The path to the captured image. */ String captureImage(int angleHorizontal, int angleVertical); diff --git a/apps/client/src/main/java/io/github/francwhite/raros/client/controller/RobotControllerImpl.java b/apps/client/src/main/java/io/github/francwhite/raros/client/controller/RobotControllerImpl.java index a8efc5e..9e72e14 100644 --- a/apps/client/src/main/java/io/github/francwhite/raros/client/controller/RobotControllerImpl.java +++ b/apps/client/src/main/java/io/github/francwhite/raros/client/controller/RobotControllerImpl.java @@ -2,6 +2,9 @@ import io.github.francwhite.raros.client.connector.*; +import java.io.FileOutputStream; +import java.io.IOException; + class RobotControllerImpl implements RobotController { private final ActionAwaiter actionAwaiter; private final MagnetService magnetService; @@ -243,17 +246,38 @@ public void turnRightAsync(double angle, double radius) { @Override public String captureImage() { - return this.cameraService.captureImage().join(); + var image = this.cameraService.captureImage().join(); + return this.saveImage(image); } @Override public String captureImage(int angleHorizontal, int angleVertical) { this.cameraService.rotateCamera(angleHorizontal, angleVertical).join(); - return this.cameraService.captureImage().join(); + var image = this.cameraService.captureImage().join(); + return this.saveImage(image); } @Override public void rotateCamera(int angleHorizontal, int angleVertical) { this.cameraService.rotateCamera(angleHorizontal, angleVertical).join(); } + + private String saveImage(String imageBase64) { + var imageBytes = java.util.Base64.getDecoder().decode(imageBase64); + var outputDirectory = new java.io.File("images"); + //noinspection ResultOfMethodCallIgnored + outputDirectory.mkdir(); + + var filePath = outputDirectory.getAbsolutePath() + + "/image-" + + java.time.LocalDateTime.now().toString().replace(":", "-") + + ".jpg"; + + try (FileOutputStream fos = new FileOutputStream(filePath)) { + fos.write(imageBytes); + return filePath; + } catch (IOException e) { + throw new RuntimeException(e.getMessage(), e); + } + } }