Wednesday, January 2, 2013

Draw something on WritableImage

Draw something on WritableImage
Draw something on WritableImage


package javafxpixel;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.image.PixelWriter;
import javafx.scene.image.WritableImage;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

/**
*
* @web http://java-buddy.blogspot.com/
*/
public class JavaFXPixel extends Application {

WritableImage myWritableImage;
PixelWriter myPixelWriter;
final int IMG_WIDTH = 255;
final int IMG_HEIGHT = 255;

@Override
public void start(Stage primaryStage) {

prepareMyWritableImage();
drawSomethingOnMyWritableImage();

ImageView myImage = new ImageView();
myImage.setImage(myWritableImage);

StackPane root = new StackPane();
root.getChildren().add(myImage);

Scene scene = new Scene(root, 300, 300);

primaryStage.setTitle("java-buddy.blogspot.com");
primaryStage.setScene(scene);
primaryStage.show();
}

public static void main(String[] args) {
launch(args);
}

private void prepareMyWritableImage(){

myWritableImage = new WritableImage(IMG_WIDTH, IMG_HEIGHT);
myPixelWriter = myWritableImage.getPixelWriter();

//fill with background blue
for(int x = 0; x < IMG_WIDTH; x++){
for(int y = 0; y < IMG_HEIGHT; y++){
myPixelWriter.setColor(x, y, Color.GRAY);
}
}
}

private void drawSomethingOnMyWritableImage(){

for(int x = 20; x < IMG_WIDTH - 20; x++){
for(int y = 20; y < IMG_HEIGHT - 20; y++){
myPixelWriter.setColor(x, y,
new Color((double)x/255, (double)y/255, 0.0, 1.0));
}
}

double l = 100.0;
int cx = IMG_WIDTH/2;
int cy = IMG_HEIGHT/2;
for(int c = 0; c < 360; c++){
double radian = Math.toRadians((double)c);
int x = cx + (int)(l * Math.cos(radian));
int y = cy + (int)(l * Math.sin(radian));
myPixelWriter.setColor(x, y, Color.WHITE);
}
}
}


No comments:

Post a Comment