2010-07-24 16 views
13

Devo creare una semplice animazione 2D senza utilizzare varie primitive per tracciare linee, cerchi ecc. Allo scopo. Deve essere fatto manipolando i pixel e implementando uno degli algoritmi per disegnare linee, cerchi ecc. Colorando i pixel.Come colorare un pixel?

Ho pensato di utilizzare Turbo C per lo scopo, ma io uso Ubuntu. Così ho provato a usare dosbox per installare ed eseguire Turbo C, ma senza risultato.

Ora la mia unica opzione è Java. È possibile manipolare i pixel in Java? Non sono riuscito a trovare alcun buon tutorial per lo stesso. Sarebbe bello se fosse possibile fornire un codice di esempio per lo stesso.

+1

Se si esegue Ubuntu e volete un compilatore, 'apt-get install accumulo essential' ti porterà GCC, lo standard C ed il compilatore C++ in questi giorni. –

+5

Nota che se sei alla ricerca di prestazioni (ad esempio per scrivere un gioco), non vuoi manipolare ogni singolo pixel usando * setRgb *, che è troppo lento. In genere si desidera manipolare direttamente i dati non elaborati sottostanti. Ad esempio, potresti voler guardare in * GetRaster() di BufferedImage. GetDataBuffer()). GetData() * che restituisce una rappresentazione int [] dei tuoi pixel. – NoozNooz42

risposta

28

La classe java.awt.BufferedImage ha un metodo setRGB(int x, int y, int rgb) che imposta il colore di un singolo pixel. Inoltre, è possibile che si desideri esaminare java.awt.Color, in particolare il metodo getRGB(), che può convertire i colori in numeri interi che è possibile inserire nel parametro int rgb di setRGB.

+1

Collegamento interrotto. Vedere https://docs.oracle.com/javase/8/docs/api/java/awt/image/BufferedImage.html e https://docs.oracle.com/javase/8/docs/api/java/awt /Color.html –

1

È possibile eseguire questa operazione utilizzando il pacchetto integrato di java 2D Graphics.

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

Un altro po 'di divertimento che ho avuto oggi dove ho usato #Jave Cavas, colori, grafica e #Swing JFrame per creare una classe pixel semplicemente colorando tutto quello che stiamo facendo è la creazione di una piazza JFrame 400 × 400 pixel (pochi extra pixel necessari per il fotogramma stesso) e quindi estendiamo la tela e coloriamo i pixel simmetricamente.

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); 
    } 
} 
Problemi correlati