2011-10-13 22 views
17

2D java oyunum için harita oluşturmanın bir yolunu bulmaya çalışıyorum ve bir görüntünün her bir pikseli boyunca dönebildiğim bir Fikri düşündüm ve bu karoun hangi pikselin rengine bağlı olduğuna bağlıyım. çizmek.Java Görüntüdeki piksellerden mi geçiyorsunuz?

örn. enter image description here

Görüntü pikselleri arasında geçiş yapmak mümkün mü? Öyle ise nasıl?

Lütfen bana bazı yararlı bağlantılar veya kod parçacıkları verebilir misiniz?

cevap

21

Not roseindia.net sayesinde şöyle, y koordinatı:

for (int y = 0; y < image.getHeight(); y++) { 
    for (int x = 0; x < image.getWidth(); x++) { 
      int clr = image.getRGB(x, y); 
      int red = (clr & 0x00ff0000) >> 16; 
      int green = (clr & 0x0000ff00) >> 8; 
      int blue = clr & 0x000000ff; 
      image.setRGB(x, y, clr); 
    } 
} 

Bu Resim verisine bellekte saklandığı sırada erişeceğiniz için kodunuzu daha hızlı hale getirecektir. (Piksel satırları olarak.)

+1

Bu cevap hangi resim sınıfını kullanıyor? –

+0

BufferedImage IIRC. :) – Zarkonnen

7

Sanırım Pixelgrabber sizin aradığınız şeydir. Eğer kod ile ilgili problemleriniz varsa lütfen yorum yazınız. İşte javadoc: Pixelgrabber ve diğer kısa örnekler: Get the color of a specific pixel, Java program to get the color of pixel

Aşağıdaki örnek, son bağlantıdan alınmıştır. Bir görüntüdeki tüm piksellerin üzerinde döngü istiyorsanız, üzerinde dış döngü yapmak için emin olun

import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 

public class ImageTest 
{ 
    public static void main(final String args[]) 
     throws IOException 
    { 
     final File file = new File("c:\\example.bmp"); 
     final BufferedImage image = ImageIO.read(file); 

     for (int x = 0; x < image.getWidth(); x++) { 
      for (int y = 0; y < image.getHeight(); y++) { 
       final int clr = image.getRGB(x, y); 
       final int red = (clr & 0x00ff0000) >> 16; 
       final int green = (clr & 0x0000ff00) >> 8; 
       final int blue = clr & 0x000000ff; 

       // Color Red get cordinates 
       if (red == 255) { 
        System.out.println(String.format("Coordinate %d %d", x, y)); 
       } else { 
        System.out.println("Red Color value = " + red); 
        System.out.println("Green Color value = " + green); 
        System.out.println("Blue Color value = " + blue); 
       } 
      } 
     } 
    } 
} 
+0

Yani bu örnek her piksele sahip olur mu? veya piksel 100.400? –

+0

Hayır, bu örnek tüm piksellerde bir döngüye ihtiyacınız olan her şey için piksel 100; 40'ı yakalar. Ben image.width ve image.height bir çift döngü sizin sorun için iyi çalışması gerektiğini düşünüyorum. –

+0

Örneği güncelledim ve şimdi onunla çalışabilirsiniz. –

İlgili konular