Freehand Image Crop dibujar dentro de la región de mapa de bits

Tratando de cosechar a mano alzada de una imagen, así que soy capaz de dibujar en la imagen. Pero va fuera de la región de mapa de bits. Sólo quiero restringir que el usuario sólo puede dibujar dentro de la región de mapa de bits, ver debajo de la captura de pantalla.

Estoy intentando poner en práctica la funcionalidad como herramienta del laso de Photoshop .

Su dibujo fuera de la región de vista, que genera una salida incorrecta. Entrada

Salida Salida

Código@

OnDraw

public void onDraw(Canvas canvas) { final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); canvas.drawBitmap(bitmap, rect, rect, null); // RectF r = new RectF(); // Matrix matrix = new Matrix(); // matrix.mapRect(r); // Log.i(TAG, "Rect " + r.left + " " + r.top + " " + r.right + " " + // r.bottom + " "); // canvas.clipRect(r.left, r.top, r.right, r.bottom); Path path = new Path(); boolean first = true; for (int i = 0; i < points.size(); i += 2) { Point point = points.get(i); if (first) { first = false; path.moveTo(point.x, point.y); } else if (i < points.size() - 1) { Point next = points.get(i + 1); path.quadTo(point.x, point.y, next.x, next.y); } else { mlastpoint = points.get(i); path.lineTo(point.x, point.y); } } canvas.drawPath(path, paint); } 

En la cosecha

 Bitmap resultingImage = Bitmap.createBitmap(widthOfscreen,heightOfScreen, bitmap1.getConfig()); Canvas canvas = new Canvas(resultingImage); Paint paint = new Paint(); paint.setAntiAlias(true); Path path = new Path(); for (int i = 0; i < SomeView.points.size(); i++) { path.lineTo(SomeView.points.get(i).x, SomeView.points.get(i).y); } // path.lineTo(150, 0); // path.lineTo(230, 120); // path.lineTo(70, 120); // path.lineTo(150, 0); canvas.drawPath(path, paint); if(crop){ paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); }else{ paint.setXfermode(new PorterDuffXfermode(Mode.SRC_OUT)); } 

Sugerirme para lograr mi meta.

Hay una manera de lograr tu objetivo.

Siga los siguientes pasos:

1) Hacer una imagen como dentro de la parte de la imagen de la cosecha debe ser transparente y la parte exterior debe ser el fondo de la comprobación de la lona debajo de la imagen.

2) Dibuja esa imagen en la parte superior de tu lienzo.

3) Dibujar cualquier cosa en su lienzo y drawagain esa imagen en la parte superior del lienzo.

Imagen:

Introduzca aquí la descripción de la imagen

Puede ignorar todos los eventos táctiles que están fuera de su vista de imagen. Recuerde la ubicación del último evento que se encuentra dentro de la vista de imagen y conéctela con la ubicación del evento siguiente que se encuentra dentro de la vista. Esto debería funcionar cuando ambos eventos forman parte de un solo movimiento (sin levantar el dedo), pero puede ser más complicado cuando el dibujo se hace fuera de su vista y luego comienza un nuevo dibujo. Trate de cubrir este caso también.

Respuesta tardía, pero el uso completo para otros u puede anular el método onmeasure y establecer el ancho del mapa de bits de imagen y la altura en ese método y cambiar el tamaño de su lienzo para que ahora sólo puede dibujar en su canvas.so su imagen vienen center.it para drawpath sólo en su bitmap .

  @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec){ super.onMeasure(widthMeasureSpec, heightMeasureSpec); height = bitmap.getHeight(); width = bitmap.getWidth(); setMeasuredDimension(width,height); } 

Y luego cambiar en su método oncrop para que pueda slove esaly.

 Bitmap resultingImage = Bitmap.createBitmap(yourbitmap.getwidth(),yourbitmap.getheight(), yourbitmap.getConfig()); 
  • Lista de capas de Android: problema de mapa de bits con la aplicación: srcCompat
  • Obtención de mapa de bits desde SurfaceView personalizado
  • Mat to Bitmap en el archivo jni cpp de Android
  • Tamaño de pantalla de Android Scaling Canvas
  • ¿Cómo elegir el tamaño de imagen óptimo para no exceder el presupuesto de VM?
  • Cargando imágenes con Picasso desde el almacenamiento interno
  • Repetición de mapa de bits + esquinas redondeadas
  • Android guardar y cargar las diferencias PNG bitmaps
  • Enmascarar (recortar) la imagen en el marco
  • Cómo almacenar (imagen de mapa de bits) y recuperar la imagen de la base de datos sqlite en android?
  • decodeStream devuelve null
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.