Как масштабировать растровое изображение до размера экрана?

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

Может ли кто-нибудь рассказать мне, как это сделать.

Спасибо Monali

Solutions Collecting From Web of "Как масштабировать растровое изображение до размера экрана?"

Попробуйте это, чтобы декодировать растровое изображение:

Где путь к файлу изображения – это путь к изображению, он будет в Строке скрытым, чтобы Файл, используя

File photos= new File(imageFilePath); 

Где фотография – это имя файла изображения , теперь вы задаете высоту и ширину в соответствии с вашими требованиями.

 public void main(){ Bitmap bitmap = decodeFile(photo); bitmap = Bitmap.createScaledBitmap(bitmap,150, 150, true); imageView.setImageBitmap(bitmap); } private Bitmap decodeFile(File f){ try { //decode image size BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; BitmapFactory.decodeStream(new FileInputStream(f),null,o); //Find the correct scale value. It should be the power of 2. final int REQUIRED_SIZE=70; int width_tmp=o.outWidth, height_tmp=o.outHeight; int scale=1; while(true){ if(width_tmp/2<REQUIRED_SIZE || height_tmp/2<REQUIRED_SIZE) break; width_tmp/=2; height_tmp/=2; scale++; } //decode with inSampleSize BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.inSampleSize=scale; return BitmapFactory.decodeStream(new FileInputStream(f), null, o2); } catch (FileNotFoundException e) {} return null; } в public void main(){ Bitmap bitmap = decodeFile(photo); bitmap = Bitmap.createScaledBitmap(bitmap,150, 150, true); imageView.setImageBitmap(bitmap); } private Bitmap decodeFile(File f){ try { //decode image size BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; BitmapFactory.decodeStream(new FileInputStream(f),null,o); //Find the correct scale value. It should be the power of 2. final int REQUIRED_SIZE=70; int width_tmp=o.outWidth, height_tmp=o.outHeight; int scale=1; while(true){ if(width_tmp/2<REQUIRED_SIZE || height_tmp/2<REQUIRED_SIZE) break; width_tmp/=2; height_tmp/=2; scale++; } //decode with inSampleSize BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.inSampleSize=scale; return BitmapFactory.decodeStream(new FileInputStream(f), null, o2); } catch (FileNotFoundException e) {} return null; } 

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

Создайте класс ScalableImageView, который расширяет ImageView:

 public class ScalableImageView extends ImageView { public boolean isMeasured = true; public ScalableImageView(Context context) { super(context); } public ScalableImageView(Context context, AttributeSet attrs) { super(context, attrs); } public ScalableImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { try { Drawable drawable = getDrawable(); if (drawable == null) { setMeasuredDimension(0, 0); } else { int width = MeasureSpec.getSize(widthMeasureSpec); int height = width * drawable.getIntrinsicHeight() / drawable.getIntrinsicWidth(); setMeasuredDimension(width, height); } } catch (Exception e) { isMeasured = false; super.onMeasure(widthMeasureSpec, heightMeasureSpec); } } } 

В XML-файле макета у меня есть местозаполнитель для изображения, определенного следующим образом:

 <ScalableImageView android:id="@+id/image1" android:layout_centerHorizontal="true" android:src="@drawable/cam_image_placeholder" android:scaleType="fitCenter" android:layout_gravity="center_horizontal" android:layout_height="wrap_content" android:layout_width="match_parent" android:adjustViewBounds="true" android:visibility="invisible" android:layout_marginBottom="6px"> </ScalableImageView> 

И затем загрузите / установите его следующим образом:

 ScalableImageView imgView = null; imgView = (ScalableImageView)findViewById(imgViewResource); imgView.setImageDrawable(myDrawable); imgView.setVisibility(ScalableImageView.VISIBLE); 

Вы можете использовать Bitmap.createScaledBitmap() , но не забудьте использовать правильную формулу преобразования при ее использовании:

 final float scale = getContext().getResources().getDisplayMetrics().density; int pixels = (int) (dps * scale + 0.5f); 

В Bitmap.createScaledBitmap() единицы для ширины и высоты являются «пикселями», в то время как вы всегда должны устанавливать свой размер в независимых от плотности пикселей (dp units), как описано здесь .

Итак, если вы хотите показать свои изображения, сохраняющие плотность, то есть ваши изображения будут занимать одну и ту же часть экрана на любом устройстве – вам нужно использовать код, похожий на следующий:

 Bitmap b = decodeScaledFile(f); final float scale = mContext.getResources().getDisplayMetrics().density; int p = (int) (SIZE_DP * scale + 0.5f); Bitmap b2 = Bitmap.createScaledBitmap(b, p, p, true); 

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

Вы можете создать scaledBitmap на основе этого кода.

 private Bitmap getScaledBitMapBaseOnScreenSize(Bitmap bitmapOriginal){ Bitmap scaledBitmap=null; try { DisplayMetrics metrics = new DisplayMetrics(); getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics); int width = bitmapOriginal.getWidth(); int height = bitmapOriginal.getHeight(); float scaleWidth = metrics.scaledDensity; float scaleHeight = metrics.scaledDensity; // create a matrix for the manipulation Matrix matrix = new Matrix(); // resize the bit map matrix.postScale(scaleWidth, scaleHeight); // recreate the new Bitmap scaledBitmap = Bitmap.createBitmap(bitmapOriginal, 0, 0, width, height, matrix, true); } catch (Exception e){ e.printStackTrace(); } return scaledBitmap; } 

Вызов метода и установка масштабированного изображения в изображение

  Bitmap scaleBitmap=getScaledBitMapBaseOnScreenSize(originalBitmapImage); if(scaleBitmap!=null) { imageView.setImageBitmap(scaleBitmap); } 

Мой xml-код для просмотра изображений,

  <ImageView android:id="@+id/image_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:scaleType="center" />