2012-01-09 5 views
0

Мне нужно объединить 2 изображения в один. В основном все, что мне нужно сделать, это наложить один из них поверх другого в центре изображения. Это должно работать на всех основных устройствах Android.Битовая карта преобразования битов

Я попробовал несколько вещей, но вот мой фрагмент кода, как прямо сейчас (да и я знаю, что это перепутались, мы должны выяснить delx и DELY):

/* Rotate our original photo */ 
// final float scale = getResources().getDisplayMetrics().density; 
    canvas.drawBitmap(bmp, 0f, 0f, null); 
    final float overlay_scale_factor = .5f; 
    final int overlaywidth = (int)(overlay.getWidth() * overlay_scale_factor); 
    final int overlayheight = (int)(overlay.getHeight() * overlay_scale_factor); 
    final int delx = overlaywidth; 
    final int dely = overlayheight; 
    Matrix mat = new Matrix(); 
    mat.postRotate(270); 
    mat.postScale(overlay_scale_factor, overlay_scale_factor); 
    //mat.postTranslate(-delx, -dely); 
    canvas.drawBitmap(overlay, mat, null); 
    /* Bottom image 'composite' is now a composite of the two. */ 

Любая помощь оценивается. Я знаю, что это просто математика, но я плохо разбираюсь в таких вещах.

Первое изображение, 'bmp' на 100% размером с холст. Второе изображение, «наложение» - это наложение, которое должно быть центрировано после поворота на 270 градусов.

ответ

4

Полностью тестировался, но я бы ожидать, что-то вроде этого, чтобы работать:

// Set the origin (0,0) in the middle of the view 
canvas.translate(width/2, height/2); 

// Draw the first bitmap so it is centered at (0,0) 
canvas.drawBitmap(bmp, -bmp.getWidth()/2, -bmp.getHeight()/2, null); 

// Rotate & scale 
canvas.save(); 
canvas.rotate(270); 
canvas.scale(.5f); 

// Draw the overlay 
canvas.drawBitmap(overlay, -overlay.getWidth()/2, -overlay.getHeight()/2, null); 
canvas.restore(); 
+0

Это работает. Огромное спасибо! Мне не хватало этого canvas.translate в начале, делая вещи сложными. – Peanut

Смежные вопросы