앱을 landscape로 실행시켰더니 카메라도 같이 돌아가버렸다...
camera.setDisplayOrientation(90);
위와 같이 설정을 해도 보이는 화면만 돌아가있지 막상 bitmap을 찍어서 보면 적용이 안되어있어서 골머리를 썩히다가 방법을 찾았다 !
카메라 onPreviewFrame에서 들어오는 byte array 데이터를 돌리면 된다 !
public static byte[] rotateNV21(byte[] input, int width, int height, int rotation) {
byte[] output = new byte[input.length];
try {
if (rotation == 0) {
System.arraycopy(input, 0, output, 0, input.length);
return null;
}
boolean swap = (rotation == 90 || rotation == 270);
boolean yflip = (rotation == 90 || rotation == 180);
boolean xflip = (rotation == 270 || rotation == 180);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
int xo = x, yo = y;
int w = width, h = height;
int xi = xo, yi = yo;
if (swap) {
xi = w * yo / h;
yi = h * xo / w;
}
if (yflip) {
yi = h - yi - 1;
}
if (xflip) {
xi = w - xi - 1;
}
output[w * yo + xo] = input[w * yi + xi];
int fs = w * h;
int qs = (fs >> 2);
xi = (xi >> 1);
yi = (yi >> 1);
xo = (xo >> 1);
yo = (yo >> 1);
w = (w >> 1);
h = (h >> 1);
// adjust for interleave here
int ui = fs + (w * yi + xi) * 2;
int uo = fs + (w * yo + xo) * 2;
// and here
int vi = ui + 1;
int vo = uo + 1;
output[uo] = input[ui];
output[vo] = input[vi];
}
}
} catch (Exception e) {
e.printStackTrace();
}
return output;
}
위의 함수를 이용하여 아래처럼 변환해주면 끝 !!
rotateNV21(bytes, previewWidth, previewHeight, 90)
저 맨 위의 camera.setDisplayOrientation도 같이 설정해줘야 보이는 화면도 돌아간다 !!
또다른 문제는.......... 프레임 속도가 느려진다는거 ㅜ,ㅜ 해결할 방법을 찾으러 가야겠다..
320x100
'프로그래밍 > Android-Java' 카테고리의 다른 글
[ANDROID] failed to apply plugin 'com.github.dcendents.android-maven'. (0) | 2021.09.15 |
---|---|
[ANDROID] Activity View 구하기 (0) | 2021.02.18 |
[ANDROID] react-native 설치 & 프로젝트 생성 (0) | 2021.01.18 |
[ANDROID] onKeyDown KeyEvent 변경 (0) | 2021.01.15 |
[ANDROID] StringBuffer 비우기 (0) | 2020.12.16 |
댓글