2014-09-21 5 views
-1

Bonjour im essayant de dessiner un rectangle à l'aide de la matrice de pixels que je suis depixel Java BufferedImage [] obtenir le pixel droit

pixels = ((DataBufferInt)image.getRaster().getDataBuffer()).getData(); 

Mais je ne peux pas sembler obtenir le pixel droit.

Im essayant d'utiliser

public void p_fillRect(int color, int x, int y, int width, int height) { 
    for (int xpos = x; xpos < width; xpos++) { 
     for (int ypos = y; ypos < height; ypos++) { 
      pixels[xpos + ypos * em.getGame().getWidth()] = color; 
     } 
    } 
} 

mais sa ne fonctionne pas comme je m'y attendais s'il vous plaît aider!

Voici un lien vers l'état actuel de la boucle: http://imgur.com/v0tjsYe

Voici un lien pour le résultat du programme: http://imgur.com/OrTxNUk

+0

Pourquoi ne pas utiliser BufferedImage.setRGB (int x, int y, couleur int)? –

Répondre

0

Une des questions/suggestions de couple.

est em.getGame().getWidth() la largeur de l'image tamponnée à laquelle vous accédez aux pixels?

Vous pouvez également essayer de changer les yPos et variables XPos donc votre tableau ressemblerait à quelque chose comme ceci:

for(int ypos = y; ypos < height ypos++){ 
    for(int xpos = x; xpos < width; xpos++){ 
     pixels[xpos + ypos em.getGame().getWidth()] = color; 
    } 
} 

Que voulez-vous dire vous ne pouvez pas sembler obtenir le pixel droit? Est-ce que le rectangle apparaît juste au mauvais endroit?

Edit: Cette méthode a fonctionné pour moi

BufferedImage canvas = new BufferedImage(canvasWidth, canvasHeight, BufferedImage.TYPE_INT_RGB); 

Raster raster = canvas.getRaster(); 
int[] pixels = ((DataBufferInt) raster.getDataBuffer()).getData(); 

public void fillRect(int xPos, int yPos, int width, int height){ 
    for(int y = 0; y < height; y++){ 
     for(int x = 0; x < width; x++){ 
      pixels[(x*canvasWidth)+y] = someColor; 
     } 
    } 
} 

Je rends la toile comme ceci:

g.drawImage(canvas, 0,0, canvasWidth, canvasHeight); 
+0

Oui em.getGame(). GetWidth() obtient la largeur de l'image buffered. Et son aspect ne ressemble pas à un rectangle comme je m'y attendais plus à une ligne épaisse diagonale. Tout ce que j'ai vraiment besoin de savoir, c'est comment obtenir un pixel dans l'espace 2D à partir du tableau de pixels unidimensionnel. Plus moins comment puis-je faire des pixels [x] [y] avec seulement un tableau unidimensionnel? – Kuliu

+0

@Kuliu votre formule est juste, x + (y * largeur). Avez-vous déjà essayé de changer votre boucle? Votre boucle d'origine passe par x, puis y. Pour cette formule, vos boucles devraient d'abord itérer, puis x (comme indiqué dans cette réponse) –

+0

oui j'ai essayé de le changer mais il me donne le même résultat :( – Kuliu