1

I'm trying to make an image of random pixels. I wrote this code, but no usefulness LadderSnack.java

import java.awt.*;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferInt;
import javax.swing.*;

public class LadderSnack extends Canvas implements Runnable {
    public static JFrame frame = new JFrame("EmiloLadderSnack v. 1.0");
    public static int width = Toolkit.getDefaultToolkit().getScreenSize().width, height = Toolkit.getDefaultToolkit().getScreenSize().height;
    public boolean run = false;
    public Thread thread;
    public BufferedImage img;
    public int[] pixels;
    public Screen screen;

    public LadderSnack() {
        screen = new Screen(width, height);
        img = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
        pixels = ((DataBufferInt) img.getRaster().getDataBuffer()).getData();
    }

    public void start() {
        if (run)
            return;
        run = true;
        thread = new Thread(this);
        thread.start();
    }

    public void stop() {
        if (!run)
            return;
        try {
            thread.join();
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(0);
        }
    }

    public void run() {
        while (run) {
            trick();
            render();
        }
    }

    private void trick() {
    }

    private void render() {
        screen = new Screen(width, height);
        BufferStrategy bs = this.getBufferStrategy();
        if (bs == null) {
            createBufferStrategy(3);
            return;
        }
        for (int i = 0; i < width * height; i++)
            pixels[i] = screen.pixels[i];
        Graphics g = bs.getDrawGraphics();
        g.drawImage(img, 0, 0, width, height, null);
        g.dispose();
        bs.show();
    }

    public static void main(String[] args) {
        LadderSnack ladderSnack = new LadderSnack();

        frame.setSize(width, height);
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
        frame.add(ladderSnack);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        ladderSnack.start();
    }
}

Render.java

public class Render {

public int width, height;
    public int[] pixels;

    public Render(int width, int height) {
        this.width = width;
        this.height = height;
        pixels = new int[width * height];
    }

    public void draw(Render render, int xOffset, int yOffset) {
        int xPixel, yPixel, y, x;
        for (x = 0; x < width; x++) {
            xPixel = x + xOffset;
            for (y = 0; y < height; y++) {
                yPixel = y + yOffset;
                pixels[xPixel + yPixel * width] = render.pixels[xPixel + yPixel * width];
            }
        }
    }
}

Screen.java

import java.awt.Toolkit;
import java.util.Random;

public class Screen extends Render {

    private Render test;

    public Screen(int width, int height) {
        super(width, height);
        int i;
        Random rand = new Random();
        test = new Render(Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height);
        for (i = 0; i < width * height; i++)
            pixels[i] = rand.nextInt();
    }

    public void render() {
        draw(test, 0, 0);
    }
}

At runtime

public void render() {
    draw(test, 50, 50);
}

in Screen.java is never executed to move the image I want the image to move through the frame, as a step to make animation and an animated random pixels image. Please,Help me.

0

3 Answers 3

2

You may want to use my api: http://www.threadox.com/projects/random-image-api/ You receive a buffered image and then you just have to draw it to the canvas.

1

Your code is a total mess. Here is something you might want to look out : Painting pixels images in Java

And here are the problems :

  • private void LadderSnack() I think this should be the constructor so should be written private LadderSnack()

  • Your Runnable implementation should be thought again. Avoid using while(true){} but rather use while(true) {Thread.sleep(xxx)} to avoid your application to freeze.

  • You create a pixels array of random values but then use pixels = ((DataBufferInt) img.getRaster().getDataBuffer()).getData(); which override your values with whatever is in the databuffer.

  • You never use your pixels array.

  • I think you should review the whole concept.
0

LadderSnack.java

import java.awt.*;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferInt;
import javax.swing.*;

public class LadderSnack extends Canvas implements Runnable {
    public static JFrame frame = new JFrame("EmiloLadderSnack v. 1.0");
    public static int width = Toolkit.getDefaultToolkit().getScreenSize().width, height = Toolkit.getDefaultToolkit().getScreenSize().height;
    public boolean run = false;
    public Thread thread;
    public BufferedImage img;
    public int[] pixels;
    public Screen screen;

    public LadderSnack() {
        screen = new Screen(width, height);
        img = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
        pixels = ((DataBufferInt) img.getRaster().getDataBuffer()).getData();
    }

    public void start() {
        if (run)
            return;
        run = true;
        thread = new Thread(this);
        thread.start();
    }

    public void stop() {
        if (!run)
            return;
        try {
            thread.join();
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(0);
        }
    }

    public void run() {
        while (run) {
            trick();
            render();
        }
    }

    private void trick() {
    }

    private void render() {
        BufferStrategy bs = this.getBufferStrategy();
        if (bs == null) {
            createBufferStrategy(3);
            return;
        }
        for (int i = 0; i < width * height; i++)
            pixels[i] = screen.pixels[i];
        Graphics g = bs.getDrawGraphics();
        g.drawImage(img, 0, 0, width, height, null);
        g.dispose();
        bs.show();
    }

    public static void main(String[] args) {
        LadderSnack ladderSnack = new LadderSnack();

        frame.setSize(width, height);
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
        frame.add(ladderSnack);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        ladderSnack.start();
    }
}

Render.java

public class Render {


public int width, height;
    public int[] pixels;

    public Render(int width, int height) {
        this.width = width;
        this.height = height;
        pixels = new int[width * height];
    }

    public void draw(Render render, int xOffset, int yOffset) {
        int xPixel, yPixel, y, x;
        for (x = 0; x < render.width; x++) {
            xPixel = x + xOffset;
            for (y = 0; y < render.height; y++) {
                yPixel = y + yOffset;
                pixels[xPixel + yPixel * width] = render.pixels[xPixel-xOffset + (yPixel-yOffset) * render.width];
            }
        }
    }
}

Screen.java

import java.awt.Toolkit;
import java.util.Random;

public class Screen extends Render {
    private Render test;

    public Screen(int width, int height) {
        super(width, height);
        int i;
        Random rand = new Random();
        test = new Render(333,333);//Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height);
        for (i = 0; i < 333 * 333; i++)
            test.pixels[i] = rand.nextInt();
        render();
    }

    public void render() {
        draw(test, 50, 50);
    }
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.