2011-07-14 7 views
2

En essayant d'obtenir toutes mes petites images comme l'herbe, l'eau et l'asphalte et ainsi de suite, dans un bitmap.Développement Android: Combinaison de petites mosaïques/bitmaps dans un bitmap

J'ai un tableau qui va comme ceci:

public int Array[]={3, 1, 3, 3, 1, 1, 3, 3, 3, 3, 
      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
      1, 1, 1, 1 ,1 ,1, 1, 1 ,1 ,1 
      ,7 ,7 ,7, 7, 7 ,7, 7 ,7 ,7, 7 
      ,7 ,7 ,7 ,7, 7 ,7, 7 ,7 ,7 ,7 
      ,7 ,7 ,7 ,7, 7, 7, 7, 7 ,7 ,7 
      ,7 ,7 ,7 ,7, 7, 7 ,7 ,7 ,7 ,7 
      ,7 ,7 ,7 ,7, 7, 7, 7 ,7 ,7, 7 
      ,6, 6, 6, 6, 6 ,6 ,6, 6, 6 ,6 
      ,6, 6, 6 ,6, 6, 6 ,6, 6 ,6 ,6 }; 

Donc basiquement c'est un 10 * 10 Chaque numéro est un espace réservé pour une image (nombre) .png

Mais comment puis-je les fusionner ensemble?

// Simon

+0

Vous souhaiterez peut-être fournir plus d'informations. Comme le nombre de colonnes/lignes que vous voulez, et dans quel ordre vous voulez fusionner les images. Voulez-vous les combiner côte à côte - ou quelque chose de différent? – hwrdprkns

+0

Il s'agit d'un 10 * 10 et oui le devrait être latéral comme pokemon. La commande est spécifiée par le tableau – carefacerz

+0

Cela ne serait pas trivial. Il pourrait être beaucoup plus rapide juste de sous-classer 'View' et de passer ce tableau au constructeur, puis de créer 10 vues comme vous le souhaitez. De cette façon, vous pouvez toujours les réorganiser facilement. – hwrdprkns

Répondre

6

Bon si l'extrait suivant doit combiner deux images côte à côte. Je ne voulais pas extrapoler pour 10, mais je suis sûr que vous comprendrez les boucles for par vous-même.

public Bitmap combineImages(Bitmap c, Bitmap s) { 
    Bitmap cs = null; 

    int width, height = 0; 

    if(c.getWidth() > s.getWidth()) { 
     width = c.getWidth() + s.getWidth(; 
     height = c.getHeight()); 
    } else { 
     width = s.getWidth() + s.getWidth(); 
     height = c.getHeight(); 
    } 

    cs = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 

    Canvas comboImage = new Canvas(cs); 

    comboImage.drawBitmap(c, 0f, 0f, null); 
    comboImage.drawBitmap(s, c.getWidth(), 0f, null); 
    //notice that drawing in the canvas will automagically draw to the bitmap 
    //as well 
    return cs; 
    } 
+0

Salut, j'ai essayé d'utiliser la boucle un, mais le grand bitmap dessine juste un le premier élément. Pour plus de détails: http://stackoverflow.com/questions/21044984/android-combine-many-bitmaps-to-one-large-one-goes-wrong-and-cant-recycle-bitma?noredirect=1#comment31640898_21044984 – lolyoshi

0

Si toutes les tuiles sont de la même taille, vous pouvez créer un grand Bitmap et d'en tirer toutes les tuiles dans le bon endroit. Par exemple:

private static final int MAP_WIDTH = 10; // in tiles 
private static final int MAP_HEIGHT = 10; 
private static final int TILE_WIDTH = 10; 
private static final int TILE_HEIGHT = 10; 

public Bitmap createMap() { 
    Bitmap mainBitmap = Bitmap.createBitmap(TILE_WIDTH * MAP_WIDTH, TILE_HEIGHT * MAP_HEIGHT, 
      Bitmap.Config.ARGB_8888); 
    Canvas mainCanvas = new Canvas(mainBitmap); 
    Paint tilePaint = new Paint(); 
    for (int i = 0; i < map.length; i++) { 
     // Grab tile image (however you want - don't need to follow this) 
     Bitmap tile = BitmapFactory.decodeResource(getResources(), getResources() 
       .getIdentifier(String.valueOf(map[i]), "drawable", "your.package")); 

     // Draw tile to correct location 
     mainCanvas.drawBitmap(tile, (i % MAP_WIDTH) * TILE_WIDTH, 
       (i/MAP_WIDTH) * TILE_HEIGHT, tilePaint); 
    } 
    return mainBitmap; 
} 
+0

Unfortuntlly ne pas. ils sont différents comme 10 différents. De l'aide? – carefacerz

+0

Légèrement confus, comment maintenez-vous la largeur et la hauteur de la carte si chacune des images est de tailles différentes? La clé est de savoir quelle sera la taille de la carte avant de commencer à dessiner. –

Questions connexes