Matrix 에서 preTranslate()와 post Translate()의 이 해 를 상세히 말 합 니 다.
3754 단어 MatrixpreTranslatepostTranslate
곽 림 대신 블 로 그 를 볼 때 Matrix 가 Camera 와 결합 해 그림 을 실현 하 는 3D 회전 이 있 었 는데,그 중에서 Matrix 의 preTranslate()와 post Translate()방법 은 당시 에 잘 몰 랐 기 때문이다.안 드 로 이 드 에서 그림 처리 내용 을 별로 보지 못 했 기 때문에 도리 에 맞지 않 을 것 입 니 다.그러나 그림 의 3D 회전 을 볼 줄 아 는 이상 이것 은 반드시 넘 어야 할 관문 이기 때문에 자 료 를 조금 보 았 는데 내 가 잘못 이해 한 것 일 뿐 그렇게 어렵 지 않다 는 것 을 알 게 되 었 다.본 고 는 내 가 그 당시 에 어떻게 이 해 했 는 지 말 하 는 것 이다.
이루어지다
『8195』효과 도 를 먼저 살 펴 보 자.
원 도와 세 장의 처 리 된 그림 을 볼 수 있 습 니 다.왼쪽 과 오른쪽 그림 의 윗부분 과 밑부분 은 대칭 적 이지 않 고 중간 에 있 는 그림 만 대칭 적 입 니 다.제 가 원 하 는 결과 그림 은 바로 중간 에 있 는 그림 입 니 다.왜 세 장의 다른 회전 그림 이 나 옵 니까?회전 중심 이 다 르 기 때문이다.
우 리 는 먼저 소스 코드 를 살 펴 보 자.
public class MainActivity extends AppCompatActivity {
private ImageView view2,view3,view4;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
view2 = (ImageView) findViewById(R.id.iv2);
view3 = (ImageView) findViewById(R.id.iv3);
view4 = (ImageView) findViewById(R.id.iv4);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.i004);
/**
* (0,0)
*/
Matrix matrix = getMatrix();
Bitmap bit = getBitmap(bitmap, matrix);
view2.setImageBitmap(bit);
/**
* (0,height/2)
*/
matrix = getMatrix();
matrix.preTranslate(0, -bitmap.getHeight() / 2);
matrix.postTranslate(0, bitmap.getHeight() / 2);
bit = getBitmap(bitmap, matrix);
view3.setImageBitmap(bit);
/**
* (0,height)
*/
matrix = getMatrix();
matrix.preTranslate(0, -bitmap.getHeight());
matrix.postTranslate(0,bitmap.getHeight());
bit = getBitmap(bitmap, matrix);
view4.setImageBitmap(bit);
}
private Bitmap getBitmap(Bitmap bitmap, Matrix matrix) {
return Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix,true);
}
@NonNull
private Matrix getMatrix(){
Matrix matrix = new Matrix();
Camera camera = new Camera();
camera.save();
camera.rotateY(45);
camera.getMatrix(matrix);
camera.restore();
return matrix;
}
}
왼쪽 그림:원본 코드 에서 우 리 는 왼쪽 그림 을 보 았 습 니 다.우 리 는 Matrix 에 대해 아무런 처리 도 하지 않 았 기 때문에 Camera 의 rotateY()방법 은 y 축 으로 회전 할 때 회전 중심 은(0,0)입 니 다.다음 그림 과 같 습 니 다.
회전 중심 은 그림 의 대칭 점 에 있 지 않 기 때문에 얻 은 결 과 는 그림 의 상하 비대 칭 이다.
중간 그림:
『8195』중간 에 있 는 그림 은 대칭 적 인 것 입 니 다.그러면 어떻게 얻 었 습 니까?앞에서 말 한 바 와 같이 회전의 중심 은(0,0)그림 의 대칭 점 에 있 지 않 기 때문에 우 리 는 회전 중심 을 대칭 점 에 두 기만 하면 된다.이것 은 preTranslate()와 post Translate()방법 을 말 해 야 한다.이 두 가지 방법 은 우리 가 말 하 는 회전 중심의 변 화 를 실현 할 수 있 지만 사실은 변 하지 않 고 그림 을 행렬 의 형식 으로 조작 할 뿐이다.회전 중심 이 바 뀌 는 것 과 같은 효 과 를 거 둘 뿐이다.
matrix.preTranslate(0, -bitmap.getHeight());
matrix.postTranslate(0,bitmap.getHeight());
이 두 줄 의 코드 가 바로 이런 역할 을 했다.preTranslate 방법의 역할 은 회전 하 는 사이 에 그림 을 위로 이동 시 키 는 것 이다.그러면 그림 은 x 축 대칭 에 관 한 것 이다.그 다음 에 회전 하 는 변 화 를 하 는 것 이다.post Translate 방법 은 변 경 된 후에 그림 을 아래로 이동 시 키 는 것 이다.그림 높이 의 절반 거 리 는 바로 원래 의 위치 로 돌아 가 는 것 이다.이렇게 그림 에 나타 난 결 과 는 대칭 적 이다.원리 도 간단 하 다.회전 중심 은(0,0)이다.단지 우리 가 그림 을 이동 할 뿐이다.이렇게 회전 변환 을 할 때 대칭 적 인 결 과 를 얻 을 수 있다.작은 매듭
이 문 제 를 이해 하고 곽 신의 블 로 그 를 계속 보 러 갔다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Matrix RGB LED Funduino를 Colorduino에서 사용Matrix LED가 장착된 ATmega328P 보드 Funduino를 사용해 봅시다. Funduino는 Colorduino, RGB LED 8x8 Matrix Board with Driver Shield for A...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.