Как окрасить пиксель?

Мне нужно создать простую 2D-анимацию без использования различных примитивов для рисования линии, круга и т.д. для этой цели. Это нужно сделать, манипулируя пикселями и реализуя один из алгоритмов рисования линии, круга и т.д. Путем окрашивания пикселей.

Я думал об использовании Turbo C для этой цели, но я использую ubuntu. Поэтому я попытался использовать dosbox для установки и запуска turbo C, но безрезультатно.

Теперь мой единственный вариант - Java. Можно ли манипулировать пикселями в Java? Я не мог найти себе хороших учебников для этого же. Было бы здорово, если бы был пример кода для него.

Ответы

Ответ 1

Класс java.awt.BufferedImage имеет метод setRGB(int x, int y, int rgb), который задает цвет отдельного пикселя. Кроме того, вы можете посмотреть java.awt.Color, особенно его метод getRGB(), который может преобразовывать Цвета в целые числа, которые вы можете ввести в параметр int rgb setRGB.

Ответ 2

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

Ответ 3

Вы можете выполнить это, используя пакет java builtin 2D Graphics.

Ответ 4

Еще одно удовольствие, которое у меня было сегодня, когда я использовал #Jave Cavas, Color, Graphics и #Swing JFrame, чтобы создать класс с простым цветом, все, что мы делаем, это создать квадрат размером в 400 × 400 пикселей (требуется несколько дополнительных пикселей для кадр он сам), а затем мы расширяем холст и окрасим пиксели симметрично.

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