2011-12-15 2 views
2

Я пытаюсь создать инструмент Magnify в своем приложении для Android. Для этого у меня есть ImageView, который я преобразовал в Bitmap (с некоторым коэффициентом масштабирования/масштабирования).Показать часть растрового изображения на холсте в Android

imageView.setDrawingCacheEnabled(true); 
Bitmap drawingCache = imageView.getDrawingCache(true); 
Matrix matrix = new Matrix(); 
matrix.postScale(5, 5);   

Bitmap viewCapture = Bitmap.createBitmap(drawingCache, 0, 0, 
             drawingCache.getWidth(), 
             drawingCache.getHeight(), 
             matrix, true); 
imageView.setDrawingCacheEnabled(false); 

Теперь я рисую это растровое изображение «viewCapture» на мой холст. Здесь я хочу, чтобы только часть изображения отображалась на холсте.

Я попытался использовать подходы: «setRectToRect() на матрице», «canvas.drawBitmap (bitmap, src, dst, paint)». Но это не получилось.

Будет ли полезно использовать SurfaceViews? Кто-нибудь сталкивался с такой ситуацией? Пожалуйста, разместите свои мысли/идеи.

ответ

2

Почему бы просто не использовать следующее?

Canvas.drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint) 

src соответствует какой области растрового изображения вы хотите рисовать и dst говорит, где вы хотите растровый. Вы можете узнать больше об этом здесь: http://developer.android.com/reference/android/graphics/Canvas.html

+0

Когда я это делаю, я получаю меньшее изображение растрового изображения вместо обрезанного изображения. – user1094717

+0

На самом деле, я масштабирую изображение перед созданием растрового изображения. И когда я использую этот метод, я теряю связанную плотность. http://developer.android.com/reference/android/graphics/Canvas.html#drawBitmap%28android.graphics.Bitmap,%20android.graphics.Rect,%20android.graphics.RectF,%20android.graphics.Paint% 29 – user1094717

0

Когда я это делаю, я получаю меньшее изображение растрового изображения вместо обрезанного изображения. Ниже приведен фрагмент, который я использовал.

  Canvas c = holder.lockCanvas(); 
      c.drawRGB(10, 10, 10);    
      Rect src = new Rect((int)x - _image.getWidth(), (int) y - _image.getHeight(), (int)x + _image.getWidth(), (int) y + _image.getHeight()); 
      RectF dst = new RectF((int)x - 50, (int) y - 50, (int)x + 50, (int) y + 50); 
      c.drawBitmap(_image, src, dst, null); 
      holder.unlockCanvasAndPost(c); 
+0

То же самое было для меня, когда я использовал src Rect как null – user1094717