Estiramiento Mapa de bits en una esquina específica

¿Es posible estirar un mapa de bits en una esquina específica? La siguiente imagen muestra mi intención:

Introduzca aquí la descripción de la imagen

Tiro una foto con la cámara, detecto las esquinas en la imagen y quiero transformar el contenido. Por lo que sé esto no se puede lograr con la clase Matrix solo. La clase Cámara debería ayudar, pero tendría que calcular la posición de la cámara. ¿Existe un algoritmo para este propósito? ¿Cómo harías esto?

Usted me hizo mirar en este problema muy interesante y parece fácil hacerlo en Android. Utilice coordenadas absolutas para los cuatro puntos de la malla:

float[] mVerts = { topLeftX, topLeftY, topRightX, topRightY, bottomLeftX, bottomLeftY, bottomRightX, bottomRightY }; canvas.drawBitmapMesh(myImage, 1, 1, mVerts, 0, null, 0, null); 

Usted tendría que averiguar cómo obtener estos puntos, pero drawBitmapMesh se extenderá por usted.

Supongo que la forma más fácil de hacer esa transformación en Android es usar OpenGL. Puede tratar su mapa de bits como una textura. A continuación, puede utilizar las esquinas detectadas como coordenadas de textura. Asigne cada uno de ellos como coordenadas de textura al vértice correspondiente de una forma rectangular simple. Luego pida a OpenGL que lo dibuje en su lienzo. Pseudocódigo:

 glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, pictureId); glBegin(GL_QUAD); glVertex(0,0); // left upper corner glTexCoord(corners[0].x/picture.getWidth(), corners[0].y/picture.getHeight()); glVertex(1,0); // right upper corner glTexCoord(corners[1].x/picture.getWidth(), corners[1].y/picture.getHeight()); glVertex(1,1); // right lower corner glTexCoord(corners[2].x/picture.getWidth(), corners[2].y/picture.getHeight()); glVertex(0,1); // left lower corner glTexCoord(corners[3].x/picture.getWidth(), corners[3].y/picture.getHeight()); glEnd(); 

No necesitas ninguna cámara ni transformaciones complicadas. Por supuesto, no es muy conveniente como el uso de OpenGL para tal tarea fácil es una exageración. Pero, no hay realmente una manera más fácil excepto escribir tal texturing por se. Si lo desea, puede comenzar a leer desde wiki e ir a enlaces externos y buscar por ejemplo la implementación de software de métodos de texturización:

http://en.wikipedia.org/wiki/Texture_mapping

También puede intentar usar cualquiera de las vistas de efectos de OpenGL, simplificará la configuración, pero también le pedirá un sombreado o dos:

http://code.google.com/p/effect-view/

  • cómo rotar el mapa de bits en android en el punto central utilizando matriz
  • ¿Cómo se utilizan los valores de android.graphics.Matrix?
  • ¿Podría alguien por favor explicar la matriz (Mr.Anderson)?
  • Utilizar getRotationMatrix y getOrientation en Android 2.1
  • Rotación Opengl de Android con datos de sensores
  • Funcionalidad backport android.graphics.Camera.setLocation ()
  • Tiempo de procesamiento de OpenCV Mat
  • Sensores Android para OpenGL
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.