2015-03-22 7 views
0

Я хочу получить координаты XY области маскирования от изображения по отношению к устройству и хочу нарисовать выбранное изображение из моего галара в область маски на сенсорном событии.Получить область маскирования координат XY на изображении

Имейте изображение с двумя областями маски, когда я касаюсь первой области маски, хочу загрузить изображение из галари и нужно нарисовать его в первой области маски.

В настоящее время я могу рисовать изображения в этих областях маски, используя событие нажатия кнопки с помощью двух отдельных кнопок относительно масок. Эти области маски рассчитываются с использованием Photoshop и используются из актива при рисовании на холсте.

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

значения getleft и getTop загружаются из актива Эти значения рассчитываются с использованием фототовара и помещаются в актив img_left_2 = 765; img_top_2 = 245; img_right_2 = 1145; img_bottom_2 = 843

Heres является код:

общественного недействительными loadImagefromGallery (View Вид) {

switch (view.getId()) { 
    case R.id.buttonLoadPicture1: 
     pictureIndex = 0; 
     break; 
    case R.id.buttonLoadPicture2: 
     pictureIndex = 1; 
     break; 

    } 
    Log.d(LOG_TAG, view.getId() + " : " + pictureIndex); 
    if (pictureIndex != -1) { 
     Intent galleryIntent = new Intent(
       Intent.ACTION_PICK, 
       android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
     startActivityForResult(galleryIntent, Constants.RESULT_LOAD_IMG); 
    } else { 
     prepareImage(); 
    } 

} 

private File getTempFile(String templateId, int pictureIndex) { 
    return new File(android.os.Environment.getExternalStorageDirectory(), 
      "temp_" + templateId + "_" + pictureIndex + ".jpg"); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    try { 
     if (requestCode == Constants.RESULT_LOAD_IMG 
       && resultCode == RESULT_OK && null != data) { 
      Uri imageUri = data.getData(); 
      System.out.println("Gallery Image URI : " + imageUri); 

      outPutFile = getTempFile(template.getId(), pictureIndex); 
      CropUtil.cropImage(this, imageUri, 
        template.getPictures()[pictureIndex], outPutFile); 

     } else if (requestCode == Constants.RESULT_CROP_IMG) { 
      try { 
       if (outPutFile.exists()) { 
        Log.d(LOG_TAG, "temp image : " + outPutFile.getPath()); 
       } else { 
        Toast.makeText(getApplicationContext(), 
          "Error while save image", Toast.LENGTH_SHORT) 
          .show(); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } else { 
      Toast.makeText(this, "You haven't picked Image", 
        Toast.LENGTH_LONG).show(); 
     } 
    } catch (Exception e) { 
    } 

} 

public void prepareImage() { 

    ImageView mImageView = (ImageView) findViewById(R.id.imgView); 
    Bitmap result = Bitmap.createBitmap(template.getWidth(), 
      template.getHeight(), Config.ARGB_8888); 

    Canvas mCanvas = new Canvas(result); 

    for (int i = 0; i < template.getImageCount(); i++) { 
     File tempFile = getTempFile(template.getId(), i); 
     Log.d(LOG_TAG, "tempFile.exists() : " + tempFile.exists()); 
     if (tempFile.exists()) { 
      String imgDecodableString = getTempFile(template.getId(), i) 
        .getPath(); 
      Log.d(LOG_TAG, "Preparing image : " + imgDecodableString); 
      Bitmap originalImage = BitmapFactory 
        .decodeFile(imgDecodableString); 
      Log.d(LOG_TAG, 
        originalImage.getWidth() + "," 
          + originalImage.getHeight()); 



      mCanvas.drawBitmap(originalImage, 
        template.getPictures()[i].getLeft(), 
        template.getPictures()[i].getTop(), null); 
      recycleBitmap(originalImage); 
     } 
    } 

    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OVER)); 

    Bitmap imageMask = Util.decodeSampledBitmapFromResource(getResources(), 
      R.drawable.template1_mask, template.getWidth()/2, 
      template.getHeight()/2); 
    mCanvas.drawBitmap(imageMask, 0, 0, paint); 
    paint.setXfermode(null); 

    mImageView.setImageBitmap(result); 
    mImageView.setScaleType(ScaleType.CENTER_INSIDE); 
    mImageView.setAdjustViewBounds(true); 
    mImageView.setBackgroundColor(Color.parseColor("#BED1CF")); 

} 

private static void recycleBitmap(Bitmap bitmap) { 
    if (bitmap != null && !bitmap.isRecycled()) { 
     bitmap.recycle(); 
     bitmap = null; 
    } 
} 
+0

вы можете используйте view.get (x) и view.get (y). Вы можете поместить некоторые или объяснить подробно – Asthme

+0

вставить код – Asthme

+0

hey @u не может получить битмап-постулирование x и y, но вы можете получить позицию VI ew.use imagview.setontouchlistner и получить событие x и y и применить к растровому изображению – Asthme

ответ

0

Использование на сенсорном слушателю, чтобы получить X и Y позицию

@Override 
     public boolean onTouchEvent(final MotionEvent event) { 
    // mScaleDetector.onTouchEvent(event); 
    gestureDetector.onTouchEvent(event); 
    handled = false; 
    actionIndex = event.getActionIndex(); 
    CustomTextview touchTextView; 

    switch (event.getActionMasked()) { 
     case MotionEvent.ACTION_DOWN: 
      Log.e(TAG, "Down"); 
      xTouch = (int) event.getX(0); 
      yTouch = (int) event.getY(0); 
      // check if we've touched inside some Bitmap 
      touchTextView = getActiveTextView(xTouch, yTouch); 

      break; 

     case MotionEvent.ACTION_POINTER_DOWN: 
      Log.e(TAG, "Pointer down"); 


      xTouch = (int) event.getX(actionIndex); 
      yTouch = (int) event.getY(actionIndex); 


      break; 


     case MotionEvent.ACTION_MOVE: 
      pointerCount = event.getPointerCount(); 
      handled = true; 




       xTouch = (int) event.getX(actionIndex); 
       yTouch = (int) event.getY(actionIndex); 

      break; 

     case MotionEvent.ACTION_UP: 

      break; 

     case MotionEvent.ACTION_POINTER_UP: 
      se; 
      break; 

     case MotionEvent.ACTION_CANCEL: 

      break; 

     default: 
      // do nothing 
      break; 
    } 

    return true; 
} 

enter code here 
+0

Да, я могу получить позицию X, Y на экране, но эти значения отличаются от значений активов, которые я сконфигурировал в активе при рисовании холста. например: стоимость актива: img_left_2 = 765; img_top_2 = 245; img_right_2 = 1145; img_bottom_2 = 843 OnTouch событие vlaue: х = 200, у = 300.769 (некоторые значения зависит от положения экрана) Поэтому я не смог найти, который маска была затронута –

+0

@JegadeepV когда-либо у установить что-то в imagview, imageview использует «Scaletype»., он может сокращаться, а увеличение вашего растрового изображения зависит от экрана. – Asthme

+0

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

Смежные вопросы