Coordenadas de recorte de Android
Quiero recortar una imagen de la galería o cámara y también obtener las coordenadas de recorte X e Y para la imagen original, no la recortada.
Necesito estas coordenadas para poder usarlas en una solicitud POST, donde envío la imagen original y las coordenadas del cultivo.
- Android VideoView.setAlpha no funciona (Xoom con 3.0)
- Java.lang.OutOfMemoryError en android.graphics.BitmapFactory.nativeDecodeAsset (Método nativo)
- Enviar archivos a la impresora WiFi
- Cómo corregir este error: java.lang.OutOfMemoryError
- ¿Cómo obtener cordinates de pantalla correspondientes a toda la pantalla, y no la vista tocado?
¿Cómo hago esto?
- Copiar carpetas en / data / data a sdcard y viceversa
- Casilla de verificación de Android state_enabled
- Descubrimiento del servicio directo WiFi de Android y duración de la batería
- Android: removeMessages (int what = 107) no está soportado antes de que WebViewCore esté configurado cuando url contenga http
- OpenCV warpPerspective rendimiento lento
- Typed Array debe ser reciclado después de su uso con #recycle ()
- Encuentre las dimensiones (altura, ancho) de un objeto usando la cámara
- Liberar mapas de bits de android.view.GLES20DisplayList
Debe utilizar una clase DragRectView para leer todo el evento de toque y el evento de movimiento y, a continuación, dibujar un rectángulo en una lona. Con la función onTouchEvent puede obtener las coordenadas de los valores X e 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); } } }
Y este será el método principal:
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(); } }); } } }
Respuesta de lockdawn trabajado para mí, pero tuve que corregir esta línea …
Math.max(mEndX, mStartX), Math.max(mEndY, mStartX)));
Creo que la línea debe ser:
Math.max(mEndX, mStartX), Math.max(mEndY, mStartY)));
- Servicios de juegos de Google Play; Sistema de invitaciones
- Cambiar el color de desplazamiento excesivo de ViewPager