2012-10-31 4 views
5

갤러리 나 카메라에서 이미지를 자르고 자른 이미지가 아니라 원래 이미지의 자르기 좌표 X와 Y를 얻고 싶습니다.안드로이드 자르기 좌표

POST 요청에서이 좌표를 사용하려면 원본 이미지와 자르기 좌표를 보내야합니다.

어떻게하면됩니까?

+1

코드를 첨부하십시오. 이미지를 제외하고. – vasart

+0

코드가 없으니 까 어떻게 해야할지 모르겠습니다. – BarkovAndrey

+0

@BarkovAndrey, 이걸 풀어내는 방법에 대한 아이디어를 얻었습니까? 나는 비슷한 문제에 직면하고있다. 여전히 어떻게해야할지 생각하고있다. – San

답변

0

터치 이벤트와 모션 이벤트를 모두 읽고 드래그하려면 DragRectView 클래스를 사용하고 직사각형을 캔버스에 그려야합니다. onTouchEvent 함수를 사용하면 X 및 Y 값에서 좌표를 얻을 수 있습니다.

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

그리고이 주요 방법이 될 것입니다 : lockdawn에서

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

대답은 나를 위해 일한,하지만 난이 줄을 수정했다 ...

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

나는 선을 생각 다음과 같아야합니다 :

Math.max(mEndX, mStartX), Math.max(mEndY,  mStartY))); 
관련 문제