2012-07-31 26 views
10

voglio unire due bitmap, ecco il mio codiceUnire due bitmap in Android

// Camera arg conversion to Bitmap 
        Bitmap cameraBitmap = BitmapFactory.decodeByteArray(arg0, 0, 
          arg0.length); 
        Bitmap back = Bitmap.createBitmap(cameraBitmap.getWidth(), 
         cameraBitmap.getHeight(), Bitmap.Config.ARGB_8888); 
        Canvas cam = new Canvas(back); 
        cam.drawBitmap(cameraBitmap, matrix, null); 


        // FrameLayout to Bitmap 
        FrameLayout mainLayout = (FrameLayout) findViewById(R.id.frame); 
        Bitmap foreground = Bitmap.createBitmap(mainLayout.getWidth(), 
          mainLayout.getHeight(), Bitmap.Config.ARGB_8888); 
        Canvas c = new Canvas(foreground); 
        mainLayout.draw(c); 

        Bitmap cs = null; 
        cs = Bitmap.createBitmap(foreground.getWidth(), cameraBitmap.getHeight(), Bitmap.Config.ARGB_8888); 

        Canvas comboImage = new Canvas(cs); 
        comboImage.drawBitmap(cameraBitmap, 0f, 0f, null); 
        comboImage.drawBitmap(foreground, 0f, cameraBitmap.getHeight(), null); 

        FileOutputStream fos = null; 
        try { 
         fos = new FileOutputStream(file); 
         if (fos != null) { 
          cs.compress(Bitmap.CompressFormat.PNG, 90, fos); 
          fos.close(); 
         } 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 

L'immagine della telecamera dovrebbe diventare di sfondo e primo piano come immagine superiore. Ho provato da Combining 2 Images in Android using Canvas ma non mi ha aiutato. Qualche idea.? Grazie

risposta

29

dal vostro esempio, si è dimenticato di aggiungere le seguenti linee:

comboImage.drawBitmap(c, 0f, 0f, null); 
comboImage.drawBitmap(s, 0f, c.getHeight(), null); 

Nel tuo esempio sopra non si disegna l'immagine nella tela, e questo è il problema. Puoi pensare che la tua tela sia il tuo album da disegno. Per ora non hai dipinto niente, e ti chiedi, non posso vedere nessun colore.

Quindi, il mio consiglio, prima di creare le due bitmap, quindi, fare la cosa seguente:

c.drawBitmap(cameraBitmap, top point, left point, null); 
c.drawBitmap(foreground, top point, left point, null); 

si può anche fare questo in primo luogo creare gli oggetti disegnabili dalle vostre bitmap, come nel codice seguente :

Drawable cameraBitmap = BitmapDrawable(cameraBitmap); 
Drawable foreground= BitmapDrawable(foreground); 

Poi, quando si hanno gli oggetti disegnabili, è possibile impostare appenderci limiti, e in questo modo si imposta dove vuoi mostrare quell'immagine.

cameraBitmap.setBounds(left, top, right, bottom); 
foreground.setBounds(left, top, right, bottom); 

e infine disegnare quella sulla tela:

cameraBitmap.draw(canvas); 
foreground.draw(canvas); 

EDIT:

Questo è un esempio, utilizzare questo per capire l'implementazione:

Bitmap bitmap = null; 
    try { 

     bitmap = Bitmap.createBitmap(500, 500, Config.ARGB_8888); 
     Canvas c = new Canvas(bitmap); 
     Resources res = getResources(); 


     Bitmap bitmap1 = BitmapFactory.decodeResource(res, R.drawable.test1); //blue 

     Bitmap bitmap2 = BitmapFactory.decodeResource(res, R.drawable.test2); //green 
     Drawable drawable1 = new BitmapDrawable(bitmap1); 
     Drawable drawable2 = new BitmapDrawable(bitmap2); 


     drawable1.setBounds(100, 100, 400, 400); 
     drawable2.setBounds(150, 150, 350, 350); 
     drawable1.draw(c); 
     drawable2.draw(c); 


    } catch (Exception e) { 
    } 
    return bitmap; 

Questo è quello che ottengo dal codice sopra:

enter image description here

+0

ho provato la tua ans, controlla la mia domanda modificata. Ma non riesci a vedere alcuna immagine di unione, puoi per favore guidarmi ulteriormente – Numair

+0

@Numair Hai ancora bisogno di aiuto? –

+0

Sì @Ofir A. Sto ancora avendo il problema :( – Numair

0

Si prega di notare che il BitmapDrawable (bitmap) è stato sconsigliato. Kinldy controlla this per l'alternativa.

BitmapDrawable(Bitmap bitmap) Questo costruttore è stato dichiarato obsoleto nel livello API 4. Utilizzare BitmapDrawable(Resources, Bitmap) per assicurarsi che il drawable abbia impostato correttamente la densità di destinazione.

0
immagine filigrana

Ridimensiona stesse dimensioni dell'immagine originale

Uri bmpUri1 = getLocalBitmapUri(ivImage); 
Uri bmpUri2 = getLocalBitmapUri(watermark_imageview); 

try { 
    bm1 = BitmapFactory.decodeStream(
      getContentResolver().openInputStream(bmpUri1)); 
    bm2 = BitmapFactory.decodeStream(
      getContentResolver().openInputStream(bmpUri2)); 

    Bitmap bmOverlay = Bitmap.createBitmap(bm1.getWidth(), bm1.getHeight(), bm1.getConfig()); 
    bm2 = Bitmap.createScaledBitmap(bm2, bm1.getWidth(), bm1.getHeight(), 
      true); 

    Canvas canvas = new Canvas(bmOverlay); 
    canvas.drawBitmap(bm1, 0,0, null); 
    canvas.drawBitmap(bm2, 0,0, null); 
    watermarkimage.setVisibility(View.GONE); 
    im =new ImageView(ImageClick.this); 
    im.setImageBitmap(bmOverlay); 
    bmpUri = getLocalBitmapUri(im); 
} catch (FileNotFoundException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

private Uri getLocalBitmapUri(ImageView imageView) { 
    Drawable drawable = imageView.getDrawable(); 
    Bitmap bmp = null; 
    if (drawable instanceof BitmapDrawable){ 
     bmp = ((BitmapDrawable) imageView.getDrawable()).getBitmap(); 
    } else { 
     return null; 
    } 
    // Store image to default external storage directory 
    Uri bmpUri = null; 
    try { 
     File file = new File(Environment.getExternalStoragePublicDirectory(
       Environment.DIRECTORY_DOWNLOADS), "share_image_" + System.currentTimeMillis() + ".png"); 
     file.getParentFile().mkdirs(); 
     FileOutputStream out = new FileOutputStream(file); 
     bmp.compress(Bitmap.CompressFormat.PNG, 90, out); 
     out.close(); 
     bmpUri = Uri.fromFile(file); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return bmpUri; 
} 
0

fusione di due bitmap in verticale quando uno è di grandi dimensioni e il secondo è piccolo
segue questo metodo

public Bitmap finalcombieimage(Bitmap c, Bitmap s) { 
    Bitmap cs = null; 
    DisplayMetrics metrics = getBaseContext().getResources().getDisplayMetrics(); 
    int width = metrics.widthPixels; 
    int height = metrics.heightPixels; 
    cs = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
    Canvas comboImage = new Canvas(cs); 
    Rect dest1 = new Rect(0, 0, width, height); // left,top,right,bottom 
    comboImage.drawBitmap(c, null, dest1, null); 
    Rect dest2 = new Rect(0, height-400/2, width, height); 
    comboImage.drawBitmap(s, null, dest2, null); 
    return cs; 
} 

enter image description here