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