Как я могу сохранить javafx.image.Image в файл jpg в приложении javafxports для Android?

Как я могу сохранить javafx.image.Image в файл jpg в приложении javafxports для Android? Я не могу найти API, единственное, что я нашел, это ImageIO, который не поддерживается на Android. мне нужна помощь Пример кода:

@Override public void start(Stage primaryStage) {

    StackPane root = new StackPane();

    Scene scene = new Scene(root, 400, 450);
    WritableImage wim = new WritableImage(300, 250);



    Canvas canvas = new Canvas(300, 250);
    GraphicsContext gc = canvas.getGraphicsContext2D();
    drawShapes(gc);
    canvas.snapshot(null, wim);
    root.getChildren().add(canvas);

    primaryStage.setTitle("Hello World!");
    primaryStage.setScene(scene);
    primaryStage.show();

    File file = new File("CanvasImage.png");


    try {

       //on desktop ImageIO.write(SwingFXUtils.fromFXImage(wim, null), "png", file);
//   on android ??????????

    } catch (Exception s) {
    }
}

person Davide Malpassini    schedule 04.05.2016    source источник
comment
Не могли бы вы уточнить: откуда вы берете изображение? Куда бы вы сохранили изображение? Вы видели пример GoNative? Он работает с изображениями в пакете Android, сохраняя их в общедоступном каталоге внешнего хранилища.   -  person José Pereda    schedule 04.05.2016
comment
Я изменил вопросы с некоторым кодом, чтобы лучше объяснить запрос   -  person Davide Malpassini    schedule 09.05.2016
comment
Итак, вы хотите иметь возможность сделать снимок холста и сохранить результат в файле png. Где это изображение должно храниться? личное хранилище (на случай, если вы захотите получить его позже) или общедоступное хранилище (чтобы иметь возможность загрузить его)?   -  person José Pereda    schedule 09.05.2016


Ответы (1)


На Android вы можете использовать android.graphics.Bitmap для сохранения в файл:

  public void saveImageToPngFile(File file, WritableImage image) {
    int width = (int) image.getWidth();
    int height = (int) image.getHeight();
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    try {

        PixelReader pr = image.getPixelReader();
        IntBuffer buffer = IntBuffer.allocate(width * height);
        pr.getPixels(0, 0, width, height, PixelFormat.getIntArgbInstance(), buffer, width);
        bitmap.setPixels(buffer.array(), 0, width, 0, 0, width, height);

        FileOutputStream out = new FileOutputStream(file);
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
person Ramon    schedule 20.12.2017