2012-07-23 2 views
6

나는 사용자 정의보기가 있고 내 캔버스에 그리려면 onDraw()를 사용하고 있습니다. 이 캔버스에 이미지를 그립니다.이미지를 가로 또는 세로로 뒤집는 방법은 무엇입니까?

이미지를 거꾸로 뒤집고 싶습니다. 참조로 수평선을 넘기십시오. 이미지를 180 ° 또는 -180 ° 회전시키는 것과 같지 않습니다.

마찬가지로, 나는 선회 (sidways)를 피벗 또는 참조로 세로선으로 미러링하거나 뒤집을 수 있습니다. 다시 이것은 canvas.rotate()가 제공하는 것과 같지 않습니다.

어떻게하는지 궁금합니다. 내가 행렬을 사용해야합니까, 아니면 "회전"과 같은 방식으로 캔버스에 어떤 방법을 제공할까요?

감사합니다.

답변

23

캔버스로 직접 할 수 없습니다. 그리기 전에 비트 맵 (매트릭스 사용)을 실제로 수정해야합니다. 다행히도 이렇게하는 것이 매우 간단한 코드입니다.

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

thanks @ aleks-g –

+0

코드 스 니펫을 보내 주셔서 감사합니다. 뒤집은 이미지를 원했고 setImageResource를 사용하고 있었을 때, 간단히이 이미지 파일로 대체했습니다 : imageView.setImageBitmap (flip (BitmapFactory.decodeResource (getResources(), R.id.someimage), Direction.HORIZONTAL)); –

+1

나는 이것이 아주 오래되었다는 것을 알고있다. 그러나 이것은 나의 베이컨을 막 저장했다. 감사! – LokiSinclair

관련 문제