2010-07-24 36 views
13

Tengo que crear una animación 2D simple sin usar varias primitivas para dibujar líneas, círculos, etc. para este propósito. Tiene que hacerse manipulando píxeles e implementando uno de los algoritmos para dibujar líneas, círculos, etc. coloreando píxeles.Cómo colorear un píxel?

Pensé en usar Turbo C para este propósito, pero uso ubuntu. Así que traté de usar dosbox para instalar y ejecutar el turbo C, pero fue en vano.

Ahora mi única opción es Java. ¿Es posible manipular píxeles en Java? No pude encontrar ningún buen tutorial para el mismo. Sería genial si se puede dar un código de muestra para el mismo.

+1

Si ejecuta ubuntu y desea un compilador, 'apt-get install build-essential' le proporcionará GCC, el compilador estándar de C y C++ actualmente. –

+5

Tenga en cuenta que si busca rendimiento (por ejemplo, para escribir un juego), no desea manipular todos y cada uno de los píxeles individualmente con * setRgb *, que es demasiado lento. Por lo general, desea manipular directamente los datos brutos subyacentes. Es posible que desee buscar, por ejemplo, en * getRaster(). GetDataBuffer()) getData() * de BufferedImage que devuelve una representación int [] de sus píxeles. – NoozNooz42

Respuesta

28

La clase java.awt.BufferedImage tiene un método setRGB(int x, int y, int rgb) que establece el color de un pixel individual. Además, es posible que desee ver en java.awt.Color, especialmente su método getRGB(), que puede convertir los colores en enteros que usted puede poner en el parámetro de int rgbsetRGB.

+1

Enlace roto. Consulte https://docs.oracle.com/javase/8/docs/api/java/awt/image/BufferedImage.html y https://docs.oracle.com/javase/8/docs/api/java/awt /Color.html –

23
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.image.BufferedImage; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class DirectDrawDemo extends JPanel { 

    private BufferedImage canvas; 

    public DirectDrawDemo(int width, int height) { 
     canvas = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); 
     fillCanvas(Color.BLUE); 
     drawRect(Color.RED, 0, 0, width/2, height/2); 
    } 

    public Dimension getPreferredSize() { 
     return new Dimension(canvas.getWidth(), canvas.getHeight()); 
    } 

    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2 = (Graphics2D) g; 
     g2.drawImage(canvas, null, null); 
    } 


    public void fillCanvas(Color c) { 
     int color = c.getRGB(); 
     for (int x = 0; x < canvas.getWidth(); x++) { 
      for (int y = 0; y < canvas.getHeight(); y++) { 
       canvas.setRGB(x, y, color); 
      } 
     } 
     repaint(); 
    } 


    public void drawLine(Color c, int x1, int y1, int x2, int y2) { 
     // Implement line drawing 
     repaint(); 
    } 

    public void drawRect(Color c, int x1, int y1, int width, int height) { 
     int color = c.getRGB(); 
     // Implement rectangle drawing 
     for (int x = x1; x < x1 + width; x++) { 
      for (int y = y1; y < y1 + height; y++) { 
       canvas.setRGB(x, y, color); 
      } 
     } 
     repaint(); 
    } 

    public void drawOval(Color c, int x1, int y1, int width, int height) { 
     // Implement oval drawing 
     repaint(); 
    } 



    public static void main(String[] args) { 
     int width = 640; 
     int height = 480; 
     JFrame frame = new JFrame("Direct draw demo"); 

     DirectDrawDemo panel = new DirectDrawDemo(width, height); 

     frame.add(panel); 
     frame.pack(); 
     frame.setVisible(true); 
     frame.setResizable(false); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 


} 

alt text http://grab.by/grabs/39416148962d1da3de12bc0d95745341.png

1

Otro poco de diversión que tenía hoy donde solía #Jave Cavas, color, gráficos y #Swing JFrame para crear una clase píxeles simplemente colorear todo lo que estamos haciendo es crear un JFrame cuadrados 400 × 400 píxeles (se requieren unos pocos píxeles extra para el cuadro) y luego ampliamos el lienzo y coloreamos los píxeles de forma simétrica.

package gcclinux.co.uk; 

import java.awt.Canvas; 
import java.awt.Color; 
import java.awt.Graphics; 

import javax.swing.JFrame; 

public class ColouringPixels extends Canvas { 

    private static final long serialVersionUID = 1L; 
    private static final int WIDTH = 407; // Additional pixels needed for the frame 
    private static final int HEIGHT = 427; // Additional pixels needed for the frame 


    @Override 
    public void paint(Graphics g) { 
     super.paint(g); 

     for (int r = 0; r <= 2; r++) { 

     for(int y = 0; y < HEIGHT; y++) { 
      for(int x = 0; x < WIDTH; x++) { 
       if (x >= 1 && x <= 100 && y >= 1 && y <=100){ 
        g.setColor(Color.WHITE); 
       } else if (x >= 101 && x <= 200 && y >= 101 && y <=200){ 
        g.setColor(Color.RED); 
       } else if (x >= 201 && x <= 300 && y >= 201 && y <=300){ 
        g.setColor(Color.WHITE); 
       } else if (x >= 301 && x <= 399 && y >= 301 && y <=400){ 
        g.setColor(Color.RED); 
       } else    
       { 
        g.setColor(Color.BLUE); 
       } 
       g.drawLine(x, y, x, y); 
      } 
     } 
      for(int x = 0; x < HEIGHT; x++) { 
       for(int y = 0; y < WIDTH; y++) { 
        if (x >= 1 && x <= 100 && y >= 1 && y <=100){ 
         g.setColor(Color.RED); 
        } else if (x >= 101 && x <= 200 && y >= 101 && y <=200){ 
         g.setColor(Color.WHITE); 
        } else if (x >= 201 && x <= 300 && y >= 201 && y <=300){ 
         g.setColor(Color.RED); 
        } else if (x >= 301 && x <= 399 && y >= 301 && y <=400){ 
         g.setColor(Color.WHITE); 
        } else    
        { 
         g.setColor(Color.BLUE); 
        } 
        g.drawLine(x, y, x, y); 
       } 
      } 
     } 
     try { 
      Thread.sleep(2000);    // Sleep for 2 seconds 
      System.exit(0);    // Closed the program 
     }catch(InterruptedException ex) { 
      Thread.currentThread().interrupt(); 
     } 
    } 

    public static void main(String[] args) { 
     JFrame frame = new JFrame("ColouringPixels - Lesson 9"); 
     frame.setSize(WIDTH, HEIGHT); 
     frame.setResizable(false); 
     frame.add(new ColouringPixels()); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 
Cuestiones relacionadas