2011-12-07 45 views
6

Tôi muốn tạo một hình ảnh kết hợp với hai hình ảnh khác nhau bằng cách chồng lên nhau.Cách sử dụng Canvas để hợp nhất hai hình ảnh trong Android?

Đối với mã này của tôi là

ImageView image = (ImageView) findViewById(R.id.imageView1); 
    Drawable drawableFore = getResources().getDrawable(R.drawable.foreg); 
    Drawable drawableBack = getResources().getDrawable(R.drawable.backg); 

    Bitmap bitmapFore = ((BitmapDrawable) drawableFore).getBitmap(); 
    Bitmap bitmapBack = ((BitmapDrawable) drawableBack).getBitmap(); 

    Bitmap scaledBitmapFore = Bitmap.createScaledBitmap(bitmapFore, 35, 35, true); 
    Bitmap scaledBitmapBack = Bitmap.createScaledBitmap(bitmapBack, 45, 45, true); 

    Bitmap combineImages = overlay(scaledBitmapBack, scaledBitmapFore); 

    image.setImageBitmap(combineImages); 

overlay() phương pháp là

public static Bitmap overlay(Bitmap bmp1, Bitmap bmp2) 
{ 
try 
{ 
    Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(), bmp1.getConfig()); 
    Canvas canvas = new Canvas(bmOverlay); 
    canvas.drawBitmap(bmp1, new Matrix(), null); 
    canvas.drawBitmap(bmp2, 0, 0, null); 
    return bmOverlay; 
} catch (Exception e) 
{ 
    // TODO: handle exception 
    e.printStackTrace(); 
    return null; 
} 
} 

trường hợp 1: Phương pháp lớp phủ trả về null trong trường hợp này.

trường hợp 2: Nhưng khi tôi chuyển đổi hình ảnh như tôi sử dụng hình nền để đặt ở hình nền trước và tiền cảnh để đặt ở chế độ nền thì mã hoạt động tốt.

nhưng tôi muốn trường hợp đầu tiên phải hoạt động bình thường nhưng không phải. Tôi không hiểu tại sao điều này lại xảy ra.

Vui lòng trợ giúp

+0

Tôi không biết tại sao n như thế nào, Hiện tại nó đang hoạt động. – AB1209

Trả lời

10

Tôi nghĩ điều đó xảy ra, vì bitmap thứ hai có kích thước lớn hơn. Vì vậy, hãy thử điều này:

public static Bitmap overlay(Bitmap bmp1, Bitmap bmp2) 
{ 
try 
{ 
    int maxWidth = (bmp1.getWidth() > bmp2.getWidth() ? bmp1.getWidth() : bmp2.getWidth()); 
    int maxHeight = (bmp1.getHeight() > bmp2.getHeight() ? bmp1.getHeight() : bmp2.getHeight()); 
    Bitmap bmOverlay = Bitmap.createBitmap(maxWidth, maxHeight, bmp1.getConfig()); 
    Canvas canvas = new Canvas(bmOverlay); 
    canvas.drawBitmap(bmp1, 0, 0, null); 
    canvas.drawBitmap(bmp2, 0, 0, null); 
    return bmOverlay; 

} catch (Exception e) 
{ 
    // TODO: handle exception 
    e.printStackTrace(); 
    return null; 
} 
} 
+0

Cảm ơn nó hiện đang hoạt động. – AB1209

+1

@Caner: làm việc như một sự quyến rũ !! Cảm ơn bạn. – dakshbhatt21

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