Mientras que la rotación de un mapa de bits utilizando la matriz, el vértice no es estable..

  Matrix matrix = new Matrix();
    matrix.postRotate(mDegree,100,100);
    mCompasstemp = Bitmap.createBitmap(mCompPic, 0, 0, mCompPic.getWidth(), mCompPic.getHeight(), matrix, true);
    mCompassHud.setImageBitmap(mCompasstemp);

Salida de mi código es como
-mapa de bits se gire.
-vértice de mi mapa de bits no es estable.
-Mapa de bits es redimensionar

Necesito deshabilitar el cambio de tamaño de imágenes y hacer la rotación estable.Por favor, puedes sugerir una solución para esto?

InformationsquelleAutor Eby | 2010-08-09

4 Comentarios

  1. 5

    En lugar de crear un nuevo mapa de bits directamente desde el original, el otro (más directo, en mi humilde opinión) es la opción para crear la resultante de mapa de bits, crear un Lienzo con que el mapa de bits, a continuación, hacer su rotación/traducción/escalamiento en la Lona y dibujar el mapa de bits original en el nuevo mapa de bits a través de la tela.

    Básicamente, usted está buscando, entonces, en:

      scaledImage = Bitmap.createBitmap (croppedWidth, croppedHeight, Bitmap.Config.ARGB_8888);
    
      Canvas offscreenCanvas = new Canvas (scaledImage);
      Matrix matrix = new Matrix();
      matrix.setRotate (rotations, centreX, centreY);
      matrix.postScale(scaleX, scaleY);
      offscreenCanvas.setMatrix (matrix);
    
      offscreenCanvas.drawBitmap (pickedImage, 0, 0, new Paint(Paint.DITHER_FLAG));
    • gracias..funciona perfecto..
  2. 1

    No estoy seguro si esto es lo que tu buscas pero podría ayudar.

    Android utiliza sus construido en características de compatibilidad a escala y mostrar un mapa de bits de forma adecuada para pantallas con diferentes densidades de píxeles. Hay dos métodos de escalamiento, pre-escalado y la auto-escalado.

    Se pre-escala de los mapas de bits » de los recursos y de la auto-escalas cuando el mapa de bits que se está preparando internamente (que es lo que estás haciendo a utilizar createBitmap).

    Ir a http://developer.android.com/guide/practices/screens_support.html y verifique en:
    4.Densidad de uso y/o tamaño de los recursos específicos de:
    Pre-escalado y escalabilidad automática de mapas de bits y nueve parches

  3. 1

    He probado este código, y la rotación es estable en el centro del mapa de bits

    matrix.reset();
    matrix.setRotate(degree, Xpos+bitmap.getWidth()/2, Ypos+bitmap.getHeight()/2);

    y, a continuación, en el lienzo doDraw()

    canvas.setMatrix(matrix);               
    canvas.drawBitmap(bitmap, Xpos, Ypos, null);
    canvas.setMatrix(null);

    La Xpos y Ypos es la posición X e y del mapa de bits
    El setMatrix(null), conjunto de la matriz a null, por lo que la rotación no afecta a la después de mapa de bits
    Y no siempre crear un nuevo mapa de bits, por lo que es ideal para el rendimiento
    Espero que ayudan a

    • puede publicar su código completo
  4. 0

    Sé que es una pregunta vieja, pero, todas las respuestas con código implica un lienzo, por lo que heres una solución sin un lienzo que trabajó para mí :

    Matrix matrix = new Matrix();
    matrix.postRotate(mDegree,100,100);
    mCompasstemp = Bitmap.createBitmap(mCompPic, 0, 0, mCompPic.getWidth(),
        mCompPic.getHeight(), matrix, true);
    
    mCompasstemp = Bitmap.createScaledBitmap(mCompassTemp, mCompPic.getWidth(),
        mCompic.getHeight(), false);
    
    mCompassHud.setImageBitmap(mCompasstemp);

    Así que, básicamente, después de rotar el mapa de bits que escalarlo para el tamaño deseado. Podría no ser la mejor práctica, pero al menos usted no tiene que crear un extra de lienzo que si usted no quiere/necesita, ya que la participación de Paint() del Objeto no es un bajo costo de operación.

Dejar respuesta

Please enter your comment!
Please enter your name here