2012-10-31 44 views
5

Galeriden veya fotoğraf makinesinden bir görüntü kırpmak ve kırpılmış olana değil, orijinal görüntü için X ve Y kırpma koordinatlarını almak istiyorum.Android kırpma koordinatları

Orijinal görüntüyü ve ekin koordinatlarını gönderdiğim bir POST isteğinde kullanmak için bu koordinatlara ihtiyacım var.

Bunu nasıl yaparım? Tüm Dokunma Etkinliği ve Hareket Olayını okumak için bir DragRectView sınıfı kullanmanız ve ardından bir Tuval'e bir dikdörtgen çizmeniz gerekir.

+1

Lütfen, nasıl bir kod ekleyeceğiniz görüntünün çıkarılması. – vasart

+0

Hiçbir kod yoktur, çünkü nasıl olduğunu bilmiyorum. – BarkovAndrey

+0

@BarkovAndrey, bunun nasıl çekileceği hakkında bir fikrin var mı? Benzer bir sorunla karşı karşıyayım, hala nasıl yapılacağını anlamaya çalışıyorum .. – San

cevap

0

OnTouchEvent işleviyle, X ve Y değerlerinden gelen kodları alabilirsiniz.

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Paint; 
import android.graphics.Rect; 
import android.text.TextPaint; 
import android.util.AttributeSet; 
import android.view.MotionEvent; 
import android.view.View; 

public class DragRectView extends View { 

    private Paint mRectPaint;  
    private int mStartX = 0; 
    private int mStartY = 0; 
    private int mEndX = 0; 
    private int mEndY = 0; 
    private boolean mDrawRect = false; 
    private TextPaint mTextPaint = null; 

    private OnUpCallback mCallback = null; 

    public interface OnUpCallback { 
     void onRectFinished(Rect rect); 
    } 

    public DragRectView(final Context context) { 
     super(context); 
     init(); 
    } 

    public DragRectView(final Context context, final AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public DragRectView(final Context context, final AttributeSet attrs,  final int defStyle) { 
     super(context, attrs, defStyle); 
     init(); 
    } 

    public void setOnUpCallback(OnUpCallback callback) { 
     mCallback = callback; 
    } 

    private void init() { 
     mRectPaint = new Paint(); 
      mRectPaint.setColor(getContext().getResources().getColor(android.R.color.holo_gr een_light)); 
     mRectPaint.setStyle(Paint.Style.STROKE); 
     mRectPaint.setStrokeWidth(5); 

     mTextPaint = new TextPaint(); 
      mTextPaint.setColor(getContext().getResources().getColor(android.R.color.holo_gr een_light)); 
     mTextPaint.setTextSize(20); 
    } 

    @Override 
    public boolean onTouchEvent(final MotionEvent event) { 

     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       mDrawRect = false; 
       mStartX = (int) event.getX(); 
       mStartY = (int) event.getY(); 
       invalidate(); 
       break; 

      case MotionEvent.ACTION_MOVE: 
       final int x = (int) event.getX(); 
       final int y = (int) event.getY(); 

       if (!mDrawRect || Math.abs(x - mEndX) > 5 || Math.abs(y -  mEndY) > 5) { 
        mEndX = x; 
        mEndY = y; 
        invalidate(); 
       } 

       mDrawRect = true; 
       break; 

      case MotionEvent.ACTION_UP: 
       if (mCallback != null) { 
        mCallback.onRectFinished(new Rect(Math.min(mStartX,  mEndX), Math.min(mStartY, mEndY), 
          Math.max(mEndX, mStartX), Math.max(mEndY,  mStartX))); 
       } 
       invalidate(); 
       break; 

      default: 
       break; 
     } 

     return true; 
    } 

    @Override 
    protected void onDraw(final Canvas canvas) { 
     super.onDraw(canvas); 

     if (mDrawRect) { 
      canvas.drawRect(Math.min(mStartX, mEndX), Math.min(mStartY, mEndY), 
        Math.max(mEndX, mStartX), Math.max(mEndY, mStartY), mRectPaint); 
      canvas.drawText(" (" + Math.abs(mStartX - mEndX) + ", " + Math.abs(mStartY - mEndY) + ")", 
        Math.max(mEndX, mStartX), Math.max(mEndY, mStartY),  mTextPaint); 
     } 
    } 
} 

Ve bu ana yöntem olacaktır: lockdawn dan

import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Rect; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

    private static final String TAG = "MainActivity"; 
    Bitmap Imag; 
    ImageView view; 
    TextView text; 
    int picw, pich; 
    int pix[]; 
    int x1, x2, y1, y2; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final DragRectView view2 = (DragRectView)  findViewById(R.id.dragRect); 
     Imag = BitmapFactory.decodeResource(getResources(), R.drawable.rgb); 
     picw = Imag.getWidth(); 
     pich = Imag.getHeight(); 
     view = (ImageView) findViewById(R.id.image); 
     view.setImageBitmap(Imag); 
     text = (TextView) findViewById(R.id.tex); 
     pix = new int[picw * pich]; 

     if (null != view2) { 
      view2.setOnUpCallback(new DragRectView.OnUpCallback() { 
       @Override 
       public void onRectFinished(final Rect rect) { 
        x1 = rect.left; 
        y1 = rect.top; 
        x2 = rect.right; 
        y2 = rect.bottom; 

        Toast.makeText(getApplicationContext(), "Coordenadas (" + x1 + ", " + y1 + ", " + x2 + ", " + y2 + ")", Toast.LENGTH_LONG).show(); 
       } 
      }); 
     } 
    } 
}  
0

Cevap benim için çalıştı, ama bu çizgiyi düzeltmek zorunda kaldı ...

Math.max(mEndX, mStartX), Math.max(mEndY,  mStartX))); 

Çizgiyi düşünüyorum olmalıdır:

Math.max(mEndX, mStartX), Math.max(mEndY,  mStartY)));