2011-08-13 13 views
7

जावा के साथ पिक्सेल छवि बनाने का सबसे अच्छा तरीका कौन सा तरीका है। कहें, मैं आयाम 200x200 के साथ एक पिक्सेल छवि बनाना चाहता हूं जो कुल में 40,000 पिक्सल है। मैं एक यादृच्छिक रंग से पिक्सेल कैसे बना सकता हूं और इसे जेएफआरएएम पर किसी दिए गए स्थान पर प्रस्तुत कर सकता हूं।जावा में चित्रकारी पिक्सल छवियां

मैंने अपने स्वयं के घटक बनाने की कोशिश की जो सिर्फ पिक्सेल बनाता है लेकिन ऐसा लगता है कि यह बहुत प्रदर्शनकारी नहीं है यदि मैं एक पिक्सेल को 250,000 बार फोर-लूप के साथ बना देता हूं और प्रत्येक इंस्टेंस को जेपीनल लेआउट में जोड़ता हूं।

class Pixel extends JComponent { 
    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.setColor(getRandomColor()); 
     g.fillRect(0, 0, 1, 1); 
    } 
} 

उत्तर

9

आप इस के लिए एक वर्ग बनाने की जरूरत नहीं है। जावा में पहले से ही उत्कृष्ट BufferedImage वर्ग है जो आपको वही करता है जो आपको चाहिए।

int w = 10; 
int h = 10; 
int type = BufferedImage.TYPE_INT_ARGB; 

BufferedImage image = new BufferedImage(w, h, type); 

int color = 255; // RGBA value, each component in a byte 

for(int x = 0; x < w; x++) { 
    for(int y = 0; y < h; y++) { 
     image.setRGB(x, y, color); 
    } 
} 

// Do something with image 
+1

भी देखें इस [उदाहरण] (http://sites.google.com/site/drjohnbmatthews/raster)। – trashgod

+0

1: 1, इसे स्विंग फलक पर रखने का प्रयास करते समय काम नहीं करता है। 'ImageIO.read() 'से एक छवि के साथ एक ही कोड का उपयोग करके, यह करता है। तो यहां कोड के साथ कुछ गड़बड़ है, हालांकि मुझे यकीन नहीं है कि – Blauhirn

3

आप शायद आकार आप चाहते हैं की एक BufferedImage बनाते हैं, और img.setRGB(x, y, getRandomColor()) का उपयोग यादृच्छिक पिक्सल का एक समूह बनाने के लिए करना चाहते हैं: यहाँ कुछ छद्म कोड है। फिर आप जहां भी चाहें पूरी छवि प्रस्तुत कर सकते हैं।

6

यहां कुंजी Canvas कक्षा है। यह मानक Component है जो मनमाने ढंग से ड्रा संचालन की अनुमति देता है। इसका उपयोग करने के लिए, आपको Canvas कक्षा को उप-वर्ग करना होगा और paint(Graphics g) विधि को ओवरराइड करना होगा, फिर प्रत्येक पिक्सेल के माध्यम से लूप करें और अपना यादृच्छिक रंग बनाएं। निम्नलिखित कोड काम करना चाहिए:

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

import javax.swing.JFrame; 

public class PixelCanvas extends Canvas { 
    private static final int WIDTH = 400; 
    private static final int HEIGHT = 400; 
    private static final Random random = new Random(); 

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

     for(int x = 0; x < WIDTH; x++) { 
      for(int y = 0; y < HEIGHT; y++) { 
       g.setColor(randomColor()); 
       g.drawLine(x, y, x, y); 
      } 
     } 
    } 

    private Color randomColor() { 
     return new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256)); 
    } 

    public static void main(String[] args) { 
     JFrame frame = new JFrame(); 

     frame.setSize(WIDTH, HEIGHT); 
     frame.add(new PixelCanvas()); 

     frame.setVisible(true); 
    } 
} 

जनित छवि इस तरह दिखता है:

Noise Image

+0

'कैनवास' और 'जेएफआरएएम' मिश्रण से सावधान रहें; 'नया रंग भी देखें (random.nextInt(), सत्य) '। – trashgod

+0

अजीब मिश्रण से बचने के लिए 'जेएफआरएएम' के बजाय 'फ्रेम' को तुरंत चालू करके हासिल किया जा सकता है। –

संबंधित मुद्दे