2010-10-24 17 views
0

J'utilise le code suivant avec l'intention de créer une image moitié blanche et moitié noire et de le mettre sur un bouton. Quel est le problème avec mon code? (Ce dernier nous voulons utiliser une logique plus complexe de ce que les pixels sont blancs et ce sont noirs, mais il devrait encore être en noir et blanc)Création d'une image et le rendu dans un ImageButton dans android

int height = 100; 
int width = 100; 

quadratImage = Bitmap.createBitmap(
     width, 
     height, 
     Bitmap.Config.ALPHA_8); 
for (int x = 0; x < width; x++){ 
    for (int y = 0; y < height; y++){ 
     int color; 

     if (x< 50){ 

      color = R.color.black; 

     } 
     else{ 
      color = R.color.white; 
     } 

     quadratImage.setPixel(
       x, y, color); 
    } 
} 
quadratImage.prepareToDraw(); 
imageButton.setImageBitmap(quadratImage); 

Mes couleurs sont définies comme:

<color name="black">#000000</color> 
<color name="white">#ffffff</color> 
+0

Quel est le problème que vous rencontrez? – Asahi

Répondre

1

D'une part, quand vous dessinez directement à un Bitmap l'int pour une couleur n'est pas l'ID de ressource d'une couleur, mais la représentation hexadécimale de la valeur de couleur réelle ARGB (par exemple 0xff000000 pour le noir, 0xffffffff pour le blanc). Vous pouvez également obtenir cette valeur via getResources(). GetColor (colorResourceId). De plus, au lieu d'essayer de dessiner directement à l'image bitmap pixel par pixel, apprenez à utiliser les outils Canvas d'Android - vous pouvez simplement remplir la toile avec du blanc, puis dessiner (http://developer.android.com/reference/ android/graphics/Canvas.html # drawRect (float, float, float, float, android.graphics.Paint)) un rectangle noir à l'autre moitié de l'écran. Ce serait beaucoup moins de code que vos boucles imbriquées, et le système peut optimiser la peinture de toile là-bas avec l'accélération matérielle et d'autres raccourcis plutôt que de former péniblement la totalité de l'image bitmap pixel par pixel.

1

Si vous Si vous voulez une image divisée en 4, cela ne fonctionnera pas, vous la ferez diviser en deux - moitié noire, moitié blanche.

Vous devez placer un test à l'intérieur des accolades if (x < 50) (et l'autre condition) pour faire varier la couleur en fonction de la valeur y.

OK, votre commentaire a noté, vous avez besoin

Resources res = this.getResources(); 

quelque part au-dessus, puis

color = res.getColor(R.color.black); 

et blanc

+0

Ceci ne produit pas une image moitié blanche moitié noire. Si c'était le cas, il serait trivial d'ajouter une condition y. – Christian