2012-07-31 55 views
10

Tôi muốn kết hợp hai bitmap, đây là mã của tôiHợp nhất hai bitmap trong 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(); 
        } 

Hình ảnh camera nên trở thành nền, và foreground là hình ảnh hàng đầu. Tôi đã thử từ Combining 2 Images in Android using Canvas nhưng nó không giúp tôi. Bất kỳ ý tưởng.? Cảm ơn

Trả lời

29

Từ ví dụ của bạn, bạn quên để thêm các dòng tiếp theo:

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

Trong ví dụ của bạn ở trên, bạn không vẽ hình ảnh của bạn trong canvas, và đó là vấn đề. Bạn có thể nghĩ rằng canvas của bạn là quyển phác thảo của bạn. Bây giờ bạn không vẽ bất cứ điều gì, và bạn tự hỏi mình, cách tôi không thể nhìn thấy bất kỳ màu sắc.

Vì vậy, đối với lời khuyên của tôi, đầu tiên tạo ra hai bitmap, sau đó, làm điều tiếp theo:

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

Bạn cũng có thể làm điều này bằng cách đầu tiên tạo ra các đối tượng drawable từ bitmap của bạn, giống như trong các mã tiếp theo :

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

Sau đó, khi bạn có đối tượng có thể kéo, bạn có thể đặt giới hạn và cách bạn đặt nơi bạn muốn hiển thị hình ảnh đó.

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

và cuối cùng rút ra rằng trên vải:

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

EDIT:

Đây là một ví dụ, sử dụng điều này để hiểu thực hiện của bạn:

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; 

này là những gì tôi nhận được từ mã ở trên:

enter image description here

+0

tôi đã cố gắng của bạn ans, kiểm tra câu hỏi đã chỉnh sửa của tôi. Nhưng không thể xem bất kỳ hình ảnh hợp nhất nào, bạn có thể vui lòng hướng dẫn thêm cho tôi – Numair

+0

@Numair Bạn vẫn cần trợ giúp? –

+0

Có @Ofir A. Tôi vẫn gặp sự cố: ( – Numair

0

Xin lưu ý rằng BitmapDrawable (Bitmap) đã không được chấp nhận. Kinldy kiểm tra this để thay thế.

BitmapDrawable(Bitmap bitmap) Công cụ xây dựng này không còn được dùng ở cấp API 4. Sử dụng BitmapDrawable(Resources, Bitmap) để đảm bảo có thể vẽ được chính xác mật độ đích.

0

Resize hình ảnh watermark cùng kích thước như hình ảnh ban đầu

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

sáp nhập hai Bitmap theo chiều dọc khi một người lớn và thứ hai là nhỏ
làm theo phương pháp này

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

Các vấn đề liên quan