2015-09-22 3 views
0

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

  // create bitmap screen capture 
      View v1 = getWindow().getDecorView().getRootView(); 
      v1.setDrawingCacheEnabled(true); 
      Bitmap screenShot = Bitmap.createBitmap(v1.getDrawingCache()); 
      v1.setDrawingCacheEnabled(false); 

      //crop out 60 px from top and scale down 0.3 times size 
      Matrix matrix = new Matrix(); 
      matrix.postScale(0.3f, 0.3f); 
      Bitmap bitmap = Bitmap.createBitmap(screenShot, 
        0, 60, 
        screenShot.getWidth(), 
        screenShot.getHeight()-60, 
        matrix, 
        true); 
+0

описывает 'Но ни урожай, ни масштаб кажется work.' – pskink

+0

@pskink размеров полученного изображения в не масштабируются вниз 0,3 раза размеров входного растра. Я просто получил урожай для работы, мне нужно было просто давать более высокие значения, чем 60, поэтому, пожалуйста, проигнорируйте эту часть. – SlowAndSteady

+0

ваш код в порядке, я понятия не имею, почему вы говорите, что это не так (да, я запускаю его, и изображение обрезано) – pskink

ответ

1

Я не знаю, почему ваш код не работает, но кадрирования растрового изображения легко

bitmap = Bitmap.createBitmap(
    bitmap,     //the source 
    0,       //left position to start copy with 
    60,      //top position to start copy with 
    bitmap.getWidth(),   //number of pixels in each row to be copied 
    bitmap.getHeight() - 60 //number of rows to be copied 
); 

и масштабирование растрового изображения легко

bitmap = Bitmap.createScaledBitmap(
    bitmap, //the source 
    120,  //destination width 
    120,  //destination height 
    false  //filter 
); 
0
private void performCrop() { 

try { Intent cropIntent = new Intent("com.android.camera.action.CROP"); 
      cropIntent.setDataAndType(imageUri, "image/*"); 
      cropIntent.putExtra("crop", "true"); 
      cropIntent.putExtra("aspectX", 1); 
      cropIntent.putExtra("aspectY", 1); 
      cropIntent.putExtra("outputX", AppController.convertDpToPx(60)); 
      cropIntent.putExtra("outputY", AppController.convertDpToPx(60)); 
      cropIntent.putExtra("return-data", true); 
      startActivityForResult(cropIntent, CROP_PIC);} catch (ActivityNotFoundException anfe) { 
      //display an error message 
      String errorMessage = "Whoops - your device doesn't support the crop action!"; 
     Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT); 
      toast.show(); 

     } 
    } 

// Этот метод поможет вам преобразовать dp в px

public static int convertDpToPx(int dp) { 
      float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, AppController.getInstance().getApplicationContext().getResources().getDisplayMetrics()); 
      return (int) px; 
     } 

// преобразование растрового изображения в Uri

public Uri getImageUri(Context inContext, Bitmap inImage) { 
     ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
     inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
     String path = Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null); 
     return Uri.parse(path); 
    } 
Смежные вопросы