2016-02-28 4 views
0

Sample ImageКак масштабировать Bitmap нарисованы на холсте, спасая вращение и перемещение, заданное с Матрицей

Привет всем. Я новичок в манипулировании изображениями в android с использованием матрицы. Я работаю над приложением, которое отображает Bitmap # 1 на экране устройства.

Растровое изображение # 1 действительно большое, около 2592 X 1456, но уменьшено, чтобы соответствовать размеру экрана устройства для отображения целей.

Затем я нарисовал губы Растровое изображение (# 2) на растровой картинке # 1 Холст, используя матрицу (с поворотом, масштаб, перевод), как показано выше.

Именно поэтому я хочу сохранить копию окончательного растрового изображения, масштабированного назад до первоначального размера (2592 x 1456).

Я попытался достичь этого, масштабируя матрицу Bitmap # 1.

Это то, что я пытался до сих пор:

// adjust the matrix to the original image size 
    // new matrix big 
    Matrix newMatrix = new Matrix(); 
    // copy matrix from small matrix 
    newMatrix = matrix; 
    RectF src = new RectF(0,0,backgroundImage.getWidth(), backgroundImage.getHeight()); 
    RectF dst = new RectF(0,0, origBackground.getWidth(), origBackground.getHeight()); 
    newMatrix.setRectToRect(src, dst, Matrix.ScaleToFit.CENTER); 
    canvas.drawBitmap(bitmap, newMatrix, paint); 

Моя проблема заключается в том, что в результате растровый # 1, губы Bitmap (# 2) будет размещена на х = 0 и у = 0 а не в требуемых координатах, отсутствует указанное вращение.

+0

http://developer.android.com/guide/practices/screens_support.html#scaling – xAF

+0

Привет @xAF. Это делается на холсте. Я не использую виджет, который автоматически настраивается на экран. Я использую матрицу для этого. –

+0

Пожалуйста, ознакомьтесь с моим предлагаемым правлением (надеюсь, я хорошо понял ваш вопрос) – xAF

ответ

0

Для масштабирования лучше использовать Canvas самостоятельно save() и restore() методов.

См. this answer.

Для вашей цели используйте translate(x,y), чтобы нарисовать при определенных координатах и ​​rotate(deg,x,y) обратить на определенный угол поворота, закрепленный при определенных координатах.

Надеюсь, это поможет решить ваши проблемы.

+0

Привет @xAF, это правильно, но я хочу, чтобы это было в решении Matrix. Поэтому я преобразовал ваш ответ в матричное решение. Выше мой ответ. благодаря –

0

После часа попыток. Наконец-то я получил ответ. Ниже приведен исходный код, который я использовал. Благодаря @xAF.

Приветствия,

public Bitmap saveBitmap() 
    { 
    Bitmap bm = Bitmap.createBitmap(bitmap1.getWidth(), bitmap1.getHeight(), Bitmap.Config.ARGB_8888); 
    mCanvas = new Canvas(bm); 
    // draw the background photo with its original size 
    mCanvas.drawBitmap(bitmap1, 0, 0, null); 

    // put the lips and adjust the matrix to the original image size 
    Matrix newMatrix = new Matrix(); // new big matrix 
    // copy the screen small matrix (with rotate, scale, translation) 
    newMatrix.set(matrix); 
    float scaleWidth = ((float) bitmap1.getWidth())/bitmap2.getWidth(); 
    float scaleHeight = ((float) bitmap1.getHeight())/bitmap2.getHeight(); 

    newMatrix.postScale(scaleWidth, scaleHeight, 0, 0); 
    mCanvas.drawBitmap(bitmapLips, newMatrix, paint); 

    return bm; 
} 
Смежные вопросы