Android: изменение размера и масштабирование части изображения - PullRequest
2 голосов
/ 21 июля 2010

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

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

Будет ли работать 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: x + width должно быть <= bitmap.width () </p>

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

Ответы [ 2 ]

2 голосов
/ 12 августа 2012

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

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

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

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

Например:

Bitmap originalBitmap = BitmapFactory.decodeResource(res, id);
Bitmap partImage = originalBitmap.createBitmap(width, height, config);
Bitmap scaledImage = partImage.createScaledBitmap(partImage, dstWidth, dstHeight, filter);
1 голос
/ 21 апреля 2011

Так что мне пришлось починить пару опечаток, но этот пример помог мне. 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();

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...