이미지 배율 조정 및 회전

3882 단어 bitmappaintMatrix
bitmap을 그릴 때 매개 변수 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스 매트릭스이 종류는 우리로 하여금 한 폭의 이미지에 공간 전환을 응용할 수 있게 한다.이런 유형의 변환은 그림을 회전하거나 재단하거나 축소하거나 변경할 수 있는 좌표 공간입니다.
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가 앉는 것을 의미합니다.
마크업이 z = 0x + 0y + 1z로 결정됩니다.
Matrix 종류의 방법: 회전, 평이, 축소, 기타 일부 효과는 이 세 가지 방법의 변화를 통해 얻을 수 있다.
미러링
특히 유용한 방법은 setScale과postTranslate인데, 그것들은 한 축 (또는 두 축) 을 뛰어넘어 뒤집을 수 있다
그림을 그리다.음수로 축소하면 이미지가 좌표계의 음수 공간으로 그려집니다.(0,0)점 때문에
왼쪽 상단에 위치하고 x축의 음수를 사용하면 왼쪽으로 그림을 그릴 수 있습니다.그래서 우리는postTranslate방을 사용해야 한다
수직, 이미지를 오른쪽으로 이동
matrix.setScale(-1, 1);
matrix.postTranslate(bmp.getWidth(),0);

뒤집다
Y축에서 같은 일을 할 수 있습니다. 그림을 뒤집어서 거꾸로 할 수 있습니다.두 축의 중심에 이미지를 배치하여
점 회전 180°
matrix.setScale(1, -1);
matrix.postTranslate(0, bmp.getHeight());

Canvas 객체에 Matrix 객체를 그릴 때와 비슷하거나 ColorMatrix
객체를 사용하여 Canvas 객체에 그려진 Paint 객체를 변경합니다.
기본 ColorMatrix 대상은 이른바 표지입니다. 기본 Matrix 대상처럼 적용될 때
이미지는 변경되지 않습니다.다음 그룹에 포함된 내용을 보면 어떻게 작동하는지 이해할 수 있습니다.
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
현재 중간 그레이스케일의 픽셀이 있다고 가정하면 빨간색 128, 파란색 128, 녹색 128, 알파
값은 0입니다(불투명함).만약 위의 색 행렬을 통해 이 픽셀을 조작한다면 수학 공식은
다음과 같습니다.
새로운 빨간색 값 = 1 * 128 + 0 * 128 + 0 * 128 + 0 * 0 + 0
새로운 파란색 값 = 0 * 128 + 1 * 128 + 0 * 128 + 0 * 0 + 0
새로운 녹색 값 = 0 * 128 + 0 * 128 + 1 * 128 + 0 * 0 + 0
새 알파 값 = 0 * 128 + 0 * 128 + 0 * 128 + 0 * 128 + 1 * 0 + 0
명암비 및 밝기 변경
ColorMatrix cm = new ColorMatrix();
float contrast = 2;
cm.set(new float[] {
contrast, 0, 0, 0, 0,
0, contrast, 0, 0, 0,
0, 0, contrast, 0, 0,
0, 0, 0, 1, 0 });
paint.setColorFilter(new ColorMatrixColorFilter(cm));

일반적으로 밝기를 조정할 때, 모든 색에 대해 행렬의 마지막 열만 사용하면 더욱 간단해진다.이것은 단지 첨가일 뿐이다
색상 값의 양에 곱할 필요가 없습니다.
따라서 밝기를 낮추기 위해 행렬 코드를 다음과 같이 사용할 수 있다.
ColorMatrix cm = new ColorMatrix();
float brightness = -25;
cm.set(new float[] {
1, 0, 0, 0, brightness,
0, 1, 0, 0, brightness,
0, 0, 1, 0, brightness,
0, 0, 0, 1, 0 });
paint.setColorFilter(new ColorMatrixColorFilter(cm));

채도 변경
ColorMatrix cm = new ColorMatrix();
cm.setSaturation(.5f);
paint.setColorFilter(new ColorMatrixColorFilter(cm));

이미지 합성
Paint 객체에 변환 모드(Xfermode)를 지정해야 합니다.
변환 모드로 사용할 수 있는 클래스 컬렉션은 Xfermode 기본 클래스에서 상속되며 PorterDuffXfermode라는 클래스가 포함됩니다. 예를 들어 다음과 같습니다.
Bitmap drawingBitmap = Bitmap.createBitmap(bmp1.
getWidth(),bmp1.getHeight(), bmp1.getConfig());
canvas = new Canvas(drawingBitmap);
paint = new Paint();
canvas.drawBitmap(bmp1, 0, 0, paint);
paint.setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.MULTIPLY));
canvas.drawBitmap(bmp2, 0, 0, paint);
compositeImageView.setImageBitmap(drawingBitmap);

더 많은 내용은 <안드로이드 멀티미디어 개발 고급 프로그래밍> 제3장 참조
첨부 파일은 더 많은 사진 처리 효과 문서 및 데모로 360 카메라와 유사한 효과

좋은 웹페이지 즐겨찾기