2010-07-21 5 views
2

Учитывая изображение, я хочу иметь возможность масштабировать только часть этого изображения. Скажем, я хочу расширить половину изображения, чтобы эта половина занимала все пространство.Android: изменение размера и масштабирование части изображения

Как это возможно?

Будет ли ImageView fitXY работать, потому что я думал, что он будет работать только для всего оригинального изображения.

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout linearLayout = new LinearLayout(this); 

      Bitmap bitmap = BitmapFactory.decodeResource(getResources(),  R.drawable.icon); 


      int width = bitmap.getWidth(); 

      int height = bitmap.getHeight(); 

      int newWidth = 640; 

      int newHeight = 480; 


      float scaleWidth = ((float) newWidth)/width; 

      float scaleHeight = ((float) newHeight)/height; 


      Matrix matrix = new Matrix(); 

      matrix.postScale(scaleWidth, scaleHeight); 

      // create the new Bitmap object 

      Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 50, 50, width, 

        height, matrix, true); 

      BitmapDrawable bmd = new BitmapDrawable(resizedBitmap); 



      ImageView imageView = new ImageView(this); 

      imageView.setImageDrawable(bmd); 

      imageView.setScaleType(ScaleType.CENTER); 



      linearLayout.addView(imageView, new LinearLayout.LayoutParams( 

        LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 

      setContentView(linearLayout); 
    } 
} 

Это работает только если в CreateBitmap, то X и Y координата первых пикселов в источнике равна 0. Значение, я не в состоянии взять подмножество изображения. Только возможность масштабирования всего изображения. Но createBitmap предназначен для подмножества изображения.

В журнале, когда параметры не равны 0, я получаю следующее исключение: java.lang.IllegalArgumentException: х + ширина должна быть < = bitmap.width()

Пожалуйста, помогите

ответ

1

So Я должен был исправить пару Typos, но этот пример сделал хорошую работу для меня. http://www.anddev.org/resize_and_rotate_image_-_example-t621.html опечатки:

int width = bitmapOrg.width(); 
int height = bitmapOrg.height(); 

стали:

int width = bitmapOrg.getWidth(); 
int height = bitmapOrg.getHeight(); 

иначе, работал, когда я пробовал Agains SDK 7

2

Сначала вы должны создать новое растровое изображение с частью, которую вы хотите масштабировать с помощью

createBitmap() //pass the source bitmap, req height and width 

Теперь из растрового изображения результата, Вы должны создать свой масштабируется с помощью растрового

createScaledbitmap() //pass the result bitmap , req width, height 

Для exapmle:

Bitmap originalBitmap = BitmapFactory.decodeResource(res, id); 
Bitmap partImage = originalBitmap.createBitmap(width, height, config); 
Bitmap scaledImage = partImage.createScaledBitmap(partImage, dstWidth, dstHeight, filter); 
Смежные вопросы