2012-07-23 13 views
6

Mam niestandardowy widok i używam onDraw(), aby narysować na moim płótnie. Rysuję obraz na tym płótnie.jak odwrócić obraz na boki lub do góry nogami?

Chcę odwrócić obraz do góry nogami, jak w przypadku klapki na linii poziomej jako odniesienie. To nie jest to samo, co obracanie obrazu o 180 stopni lub -180 stopni.

Podobnie, chcę wykonać odbicie lustrzane lub odwrócić linie boczne, np. Pionową linią jako oś obrotu lub odniesienie. Znowu nie jest to to samo, co zapewnia canvas.rotate().

Zastanawiam się, jak to zrobić. Czy powinienem używać matrycy, czy też płótna dostarczają jakiejkolwiek metody, aby zrobić to jak "obrót".

Dzięki.

Odpowiedz

23

Nie można tego zrobić bezpośrednio za pomocą Canvas. Będziesz musiał zmodyfikować bitmapę (używając macierzy) przed jej rysowaniem. Na szczęście jest to bardzo prosty kod:

public enum Direction { VERTICAL, HORIZONTAL }; 

/** 
    Creates a new bitmap by flipping the specified bitmap 
    vertically or horizontally. 
    @param src  Bitmap to flip 
    @param type  Flip direction (horizontal or vertical) 
    @return   New bitmap created by flipping the given one 
         vertically or horizontally as specified by 
         the <code>type</code> parameter or 
         the original bitmap if an unknown type 
         is specified. 
**/ 
public static Bitmap flip(Bitmap src, Direction type) { 
    Matrix matrix = new Matrix(); 

    if(type == Direction.VERTICAL) { 
     matrix.preScale(1.0f, -1.0f); 
    } 
    else if(type == Direction.HORIZONTAL) { 
     matrix.preScale(-1.0f, 1.0f); 
    } else { 
     return src; 
    } 

    return Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, true); 
} 
+0

dzięki @ aleks-g –

+0

Dzięki za fragment kodu. Tam, gdzie potrzebowałem odwróconego obrazu i korzystałem z setImageResource, po prostu zastąpiłem to: imageView.setImageBitmap (flip (BitmapFactory.decodeResource (getResources(), R.id.someimage), Direction.HORIZONTAL)); –

+1

Wiem, że to bardzo stare, ale to uratowało mi bekon. Dzięki! – LokiSinclair

Powiązane problemy