3.3.1 입력 매트릭스

3344 단어 행렬
Android API에는 기존 비트맵 객체를 그리거나 다른 비트맵 객체에서 비트맵 객체를 만들 때 사용할 수 있는 Matrix(행렬) 클래스가 있습니다.이 종류는 우리로 하여금 한 폭의 이미지에 공간 전환을 응용할 수 있게 한다.이런 유형의 변환은 회전, 재단, 축소 또는 그림의 좌표 공간을 변경할 수 있다.
Matrix 클래스는 변환을 숫자 9개의 배열로 나타냅니다.많은 경우, 이 숫자들은 하나의 공식에 의해 생성될 수 있으며, 이 공식은 수학적으로 발생하는 전환을 나타낸다.예를 들어 회전 공식의 경우 정현과 여현을 사용하여 행렬의 숫자를 생성한다.
Matrix 클래스의 숫자도 수동으로 입력할 수 있습니다.Matrix 클래스가 어떻게 작동하는지 알아보기 위해 수동 변환으로 시작합니다.
Matrix 클래스의 각 숫자는 이미지의 각 점에 대한 3개의 좌표(x, y, z) 중 하나에 적용됩니다.
예를 들어 다음과 같은 9개의 부동 소수점 수를 포함하는 행렬이 있습니다.
    1  0  0
    0  1  0
    0  0  1
맨 윗줄(1,0,0)에서 원본 이미지의 x 좌표를 지정하면 다음과 같은 공식에 따라 변환됩니다: x=1x+0y+0z.보시다시피 값이 행렬에 놓인 위치는 해당 숫자가 결과에 어떻게 영향을 미칠지 결정합니다.맨 윗줄은 항상 x 좌표에 영향을 주지만 원본 이미지의 x, y, z 좌표를 조작할 수 있습니다.
두 번째 줄(0,1,0)은 y 좌표가 y=0x+1y+0z로 확정되고, 세 번째 줄(0,0,1)은 z=0x+0y+1z를 의미한다.
다시 말하면 이 행렬은 어떠한 전환도 하지 않는다.소스 이미지에 있는 대로 모든 컨텐트가 배치됩니다.
코드에서 이를 실현하기 위해 Matrix 대상을 만들고 setValues 방법을 통해 값을 현저하게 설정합니다.
1                 Matrix matrix=new Matrix();

2                 matrix.setValues(new float[]{1,0,0,0,1,0,0,0,1});
캔버스에 비트맵을 그릴 때 Matrix 객체를 사용할 수 있습니다.
1 canvas.drawBitmap(bmp, matrix, paint);
이는 이전 예제에서 사용된 drawBitmap 메서드를 대체합니다.
Matrix 객체가 이미지를 어떤 방식으로 변경할 수 있도록 기존 숫자를 다른 값으로 대체할 수 있습니다.첫 번째 숫자를 1에서 0.5로 바꾸면 x축에서 이미지를 50% 압축합니다. 첫 번째 숫자는 원본 이미지의 x 좌표에 작용하여 결과 이미지의 x 좌표에 영향을 줍니다.
   0.5  0  0
   0   1   0
   0   0   1
1        Matrix matrix=new Matrix();

2        matrix.setValues(new float[]{0.5,0,0,0,1,0,0,0,1});

3        canvas.drawBitmap(bmp, matrix, paint);
만약 행렬을 바꾸면 x 좌표도 원위도의 y 좌표의 영향을 받게 되면 두 번째 숫자를 수정할 수 있다.
1                  Matrix matrix=new Matrix();

2                 matrix.setValues(new float[]{1,0.5,0,0,1,0,0,0,1});

3                 canvas.drawBitmap(bmp, matrix, paint);
보시다시피 그림이 기울어집니다.이것은 첫 번째 줄의 숫자로 인해 기울어지는데, 그 조작은 모든 픽셀의 x값이고, 각 픽셀의 y값에 따라 바뀐다.Y값이 증가함에 따라 그림의 아래쪽을 이동하려고 하기 때문에 x값이 증가하여 그림이 기울어진다.음수 값을 사용하면 이미지가 반대 방향으로 기울어집니다.또한 좌표 변화로 인해 이미지가 잘린 것을 알 수 있습니다.따라서 이런 조작을 하려면 결과 비트맵의 크기를 늘려야 한다.
1     alteredBitmap=Bitmap.createBitmap(bmp.getWidth()*2, bmp.getHeight(), bmp.getConfig());
이 행렬의 전환은 매우 강력하다.동시에 우리는 수동으로 그들을 처리하는 것이 매우 번거롭다는 것을 발견할 것이다.그러나 대부분의 매트릭스를 수동으로 처리하기 위한 작업에 대응하는 공식에 필요한 수학 지식은 이 책의 범위를 넘어섰다.그러나 깊이 있는 학습에 흥미가 있다면 인터넷에는 충분한 자원이 있다.Wikipedia의 Transformation Matrix(변환 행렬) 기사가 좋은 출발점입니다.http://en.wikipedia.org/Transformation_matrix.

좋은 웹페이지 즐겨찾기