갤러리 나 카메라에서 이미지를 자르고 자른 이미지가 아니라 원래 이미지의 자르기 좌표 X와 Y를 얻고 싶습니다.안드로이드 자르기 좌표
POST 요청에서이 좌표를 사용하려면 원본 이미지와 자르기 좌표를 보내야합니다.
어떻게하면됩니까?
갤러리 나 카메라에서 이미지를 자르고 자른 이미지가 아니라 원래 이미지의 자르기 좌표 X와 Y를 얻고 싶습니다.안드로이드 자르기 좌표
POST 요청에서이 좌표를 사용하려면 원본 이미지와 자르기 좌표를 보내야합니다.
어떻게하면됩니까?
터치 이벤트와 모션 이벤트를 모두 읽고 드래그하려면 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();
}
});
}
}
}
대답은 나를 위해 일한,하지만 난이 줄을 수정했다 ...
Math.max(mEndX, mStartX), Math.max(mEndY, mStartX)));
나는 선을 생각 다음과 같아야합니다 :
Math.max(mEndX, mStartX), Math.max(mEndY, mStartY)));
코드를 첨부하십시오. 이미지를 제외하고. – vasart
코드가 없으니 까 어떻게 해야할지 모르겠습니다. – BarkovAndrey
@BarkovAndrey, 이걸 풀어내는 방법에 대한 아이디어를 얻었습니까? 나는 비슷한 문제에 직면하고있다. 여전히 어떻게해야할지 생각하고있다. – San