I want to put a simple raster graphics editor into my JavaFX app.
It seems that it can't be done using javafx.scene.image.Image
because the graphics object is read-only.
Can somebody point me how can I do this or maybe there are some classes that provide direct access to pixel map?
upd: it is not necessary for editor to respond quickly, so the suggestions a-la create hidden java.awt.Canvas
, handle all the events on ImageView to draw on the canvas, create by some means an output stream from the canvas to create new javafx Image and put it to ImageView.
You can use a JavaFX canvas to do this as shown in the Canvas Tutorial "Interacting with the User" section. You don't need a
java.awt.Canvas
.You can take a snapshot of a canvas (or any other node) to create an image.
You can read a pixel map from an existing image using a PixelReader and write to an image's pixel map using a PixelWriter obtained from a WritableImage as shown in the ImageOps tutorials.
To write your resultant image to disk, convert it to a BufferedImage and write it out using ImageIO.
If you need it, there are samples of scaling images to a pixelated form (similar to the zoom function in Microsoft Paint): JavaFX ImageView without any smoothing.