2011-02-01 3 views

ответ

59

Вы можете использовать Canvas - проверить эту статью:

http://www.jondev.net/articles/Combining_2_Images_in_Android_using_Canvas

Обновленный код, чтобы сделать это бок о бок:

public Bitmap combineImages(Bitmap c, Bitmap s) { // can add a 3rd parameter 'String loc' if you want to save the new image - left some code to do that at the bottom 
    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); 

    // this is an extra bit I added, just incase you want to save the new image somewhere and then return the location 
    /*String tmpImg = String.valueOf(System.currentTimeMillis()) + ".png"; 

    OutputStream os = null; 
    try { 
     os = new FileOutputStream(loc + tmpImg); 
     cs.compress(CompressFormat.PNG, 100, os); 
    } catch(IOException e) { 
     Log.e("combineImages", "problem combining images", e); 
    }*/ 

    return cs; 
    } 
+1

Спасибо xil3. Я попробовал это, но он будет совмещать два изображения один под другим. Но мне нужно объединить два изображения бок о бок – Yuvaraj

+0

Я обновил ответ с помощью кода, который должен работать бок о бок. Всего несколько незначительных изменений от оригинала. – xil3

+0

Большое спасибо ... Это решение, которое я ищу ... – Yuvaraj

0

Отличная работа в выбранный ответ. Если вы хотите сделать это со списком массива растровых изображений и бок о бок смотрите ниже:

private Bitmap combineImageIntoOneFlexWidth(ArrayList<Bitmap> bitmap) { 
     int w = 0, h = 0; 
     for (int i = 0; i < bitmap.size(); i++) { 
      if (i < bitmap.size() - 1) { 
       h = bitmap.get(i).getHeight() > bitmap.get(i + 1).getHeight() ? bitmap.get(i).getHeight() : bitmap.get(i + 1).getHeight(); 
      } 
      w += bitmap.get(i).getWidth(); 
     } 

     Bitmap temp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); 
     Canvas canvas = new Canvas(temp); 
     int top = 0; 
     for (int i = 0; i < bitmap.size(); i++) { 
      Log.e("HTML", "Combine: " + i + "/" + bitmap.size() + 1); 

      top = (i == 0 ? 0 : top + bitmap.get(i).getWidth()); 
      //attributes 1:bitmap,2:width that starts drawing,3:height that starts drawing 
      canvas.drawBitmap(bitmap.get(i), top, 0f, null); 
     } 
     return temp; 
    } 
Смежные вопросы