2013-09-10 3 views
4

Я пытаюсь продать растровое изображение и перевести его на каждом шаге.Масштабирование и перевод растрового изображения в android

Если мы посмотрим на следующий код, я рисую изображение, переводя его и масштабируя, а затем выполняю те же операции в обратном порядке, чтобы вернуть исходную конфигурацию. Но после применения операций я получаю исходное масштабированное изображение (масштабный коэффициент 1), но изображение переводится в другую позицию.

Не могли бы вы указать правильный метод? (В приведенном выше примере, как я достигаю первоначальную конфигурацию?)

protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     Matrix matrix = new Matrix(); 

     scale = (float)screenWidth/201.0f; 
     matrix.setTranslate(-40, -40); 
     matrix.setScale(scale, scale); 

     canvas.drawBitmap(bitMap, matrix, paint); 

     //back to original 
     canvas.drawColor(0, Mode.CLEAR); 
     matrix.setScale(1.0f/scale, 1.0f/scale); 
     matrix.setTranslate(40,40); 
     canvas.drawBitmap(bitMap, matrix, paint); 

    } 
+0

см ссылку, это поможет вам [ввести описание ссылки здесь] [1] [1]: http://stackoverflow.com/questions/8722359/scale-rotate-bitmap-using-matrix -in-android – Sakthi

+0

@JohnSakthivel - Спасибо за информацию – User42

ответ

5

Вы должны просто использовать Canvas методы масштабирования и перевод, таким образом, то вы можете воспользоваться в save() и restore() API, чтобы делать то, что тебе нужно. Например:

protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

    //Save the current state of the canvas 
    canvas.save(); 

    scale = (float) screenWidth/201.0f; 

    canvas.translate(-40, -40); 
    canvas.scale(scale, scale); 
    canvas.drawBitmap(bitMap, 0, 0, paint); 

    //Restore back to the state it was when last saved 
    canvas.restore(); 

    canvas.drawColor(0, Mode.CLEAR); 
    canvas.drawBitmap(bitMap, 0, 0, paint); 
} 
+0

Это решило мою проблему, но все указатели, почему мой код не работает? – User42

1

Я думаю, что проблема с исходным кодом может быть из-за способа масштаба и перевести использовать точку, вокруг которой вы масштабироваться/переводить. Если вы укажете правильные точки поворота между/для операций, все будет в порядке.

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