2012-10-31 32 views
5

मैं गैलरी या कैमरे से एक छवि फसल करना चाहता हूं और फसल को मूल छवि के लिए एक्स और वाई को निर्देशित करता हूं, न कि फसल वाला।एंड्रॉइड फसल निर्देशांक

मुझे इन निर्देशांकों को POST अनुरोध में उपयोग करने के लिए आवश्यक है, जहां मैं मूल छवि और फसल के निर्देशांक भेजता हूं।

मैं यह कैसे कर सकता हूं?

+1

कृपया, कोड संलग्न करें कि आप कैसे हैं छवि का चयन – vasart

+0

कोई कोड नहीं है, क्योंकि मुझे नहीं पता कि कैसे। – BarkovAndrey

+0

@ बार्कोव एंड्रे, क्या आपको यह पता चल गया कि इसे कैसे खींचें? मुझे एक समान समस्या का सामना करना पड़ रहा है, अभी भी यह पता लगाने की कोशिश कर रहा है कि इसे कैसे किया जाए .. – San

उत्तर

0

आपको सभी टच इवेंट और मोशन इवेंट पढ़ने के लिए ड्रैगरेक्ट व्यू क्लास का उपयोग करने की आवश्यकता है, और उसके बाद एक कैनवास में एक आयत खींचें। ऑन टचवेन्ट फ़ंक्शन के साथ आप एक्स और वाई मानों से कॉर्ड प्राप्त कर सकते हैं।

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); 
     } 
    } 
} 

और यह मुख्य विधि हो जाएगा:

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

lockdawn से उत्तर मेरे लिए काम किया है, लेकिन मैं इस लाइन को सही करने के लिए किया था ...

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

मैं लाइन लगता है होना चाहिए:

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