이글은 알게된 정보를 기록한 것입니다.
참쓰잘데기 없는 일이라고 생각할수도 있겠지만 해보고 싶어서 계속 탐구해봤습니다.
보는 와중에 이상하게 한글 정보는 없었네요. 그래서 블로그에도 남깁니다.
Android 에서 Matrix 클래스에는 좌표 변환을위한 3x3 행렬이 있습니다.
행렬로 구성되어 비트맵을 회전하거나 스케일 조정등에도 쉽게 이용이 가능합니다.
하지만 Matrix 로 만들어진 정보를 다시 x, y 좌표의 Rectangle 정보로 가져오기 위한 방법입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | private fun parseMatrix( matrix:Matrix, width:Int, height:Int ) : Array<PointF> { var values = FloatArray( 9 ) matrix.getValues( values ) var startPoint = PointF( values[2], values[5] ) var rightTopPoint = PointF( width * values[0], width * values[3] ) var bottomLeftPoint = PointF( height * values[1], height * values[4] ) var bottomRightPoint = PointF( rightTopPoint.x + bottomLeftPoint.x, rightTopPoint.y + bottomLeftPoint.y) return arrayOf( startPoint , PointF( startPoint.x + rightTopPoint.x, startPoint.y + rightTopPoint.y ) , PointF( startPoint.x + bottomLeftPoint.x, startPoint.y + bottomLeftPoint.y ) , PointF( startPoint.x + bottomRightPoint.x, startPoint.y + bottomRightPoint.y )) } | cs |
Matrix 의 배열값을 가져오면 위와같이 3x3 배열이 나옵니다.
| skewY scaleY transY |
| pers0 pers1 pers2 |
scaleX | horizontal scale factor |
skewX | horizontal skew factor |
transX | horizontal translation |
skewY | vertical skew factor |
scaleY | vertical scale factor |
transY | vertical translation |
pers0 | input x-axis perspective factor |
pers1 | input y-axis perspective factor |
pers2 | perspective scale factor |
trans 는 좌표 정보를 담고있고, scale 은 배율 정보, skew 는 기울기에 대한 정보를 담고있습니다.
Matrix 의 왼쪽 상단의 좌표 정보를 알고싶다면 transX, TransY 정보를 보면 되고,
Matrix 의 오른쪽 상단의 좌표 정보를 알고싶다면 scaleX, skewY 정보를
Matrix 의 왼쪽 하단의 좌표 정보를 알고싶다면 skewX, scaleY 정보를 보면 됩니다.
결국 3x3 배열 안에서 기준으로 값이 정의 되기 때문에 만약 100x100 이미지의 경우 각각 그 크기만 큼을 곱해주면
원하는 값을 알수있게 됩니다.
참고 사이트.
https://docs.microsoft.com/en-us/dotnet/api/skiasharp.skmatrix?view=skiasharp-1.68.0