2011-07-14 75 views
2

我試圖將我所有的小草圖,水和瀝青等圖像合併到一個位圖中。Android開發:將小瓷磚/位圖合併爲一個位圖

我有一個是這樣的一個數組:

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 }; 

所以basicly這是一個10 * 10 每一個數字是一個圖像(數字)png格式

一個佔位符,但我怎麼合併它們在一起?

//西蒙

+0

您可能想要提供更多信息。比如你想要多少列/行,以及你想要合併圖像的順序。你想讓它們並排結合 - 還是不同的? – hwrdprkns

+0

這是一個10 * 10,是的應該像pokemon一樣獲得sidebyside。 訂單是在數組中指定的 – carefacerz

+0

這不是微不足道的。只是子類View'並將該數組傳遞給構造函數,然後以任何您想要的方式創建10個視圖可能會更快。這樣你就可以隨時重新排列它們。 – hwrdprkns

回答

6

好了,下面的代碼片段應並排組合兩個圖像的一面。我不想推斷10,但我相信你會自己找出for循環。

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

您好,我嘗試使用循環一,但大位圖只繪製一個第一個元素。對於詳細信息: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

如果所有的瓷磚都可以創建一個大的Bitmap並繪製在正確的位置所有的瓷磚大小相同。例如:

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不。像10個不同的不同。任何幫助? – carefacerz

+0

有點困惑,如果每幅圖像的尺寸不同,如何保持地圖的寬度和高度?關鍵是在開始繪製之前知道地圖的大小。 –

相關問題