반응형
toDataURL로 넘어온 데이터를 비트맵으로 바꾼 다음에 변환하는 코드. rgba가 바로 있다면 윗부분을 잘라서 알아서 쓰면 됩니다.
색상 포맷의 정의는 위 코드를 참고하면 된다. NV21 또는 yuv420sp의 경우 아래 코드에서 uv만 바꿔주면 됨!
public byte[] convertBitmapToYUV(String base64Data) {
byte[] decodedBytes = Base64.decode(base64Data.split(";base64,")[1], Base64.DEFAULT);
Bitmap bitmap = BitmapFactory.decodeByteArray(decodedBytes,0,decodedBytes.length);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int[] pixels = new int[width * height];
Log.d(TAG,"minhaeng converted width x height "+width+","+height);
bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
byte[] yuvData = new byte[width * height * 3 / 2];
int inputIndex = 0;
int yIndex = 0;
int uvIndex = width * height;
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
int pixel = pixels[inputIndex++];
int r = Color.red(pixel);
int g = Color.green(pixel);
int b = Color.blue(pixel);
int yValue = (int) (0.299 * r + 0.587 * g + 0.114 * b);
int uValue = (int) (-0.14713 * r - 0.28886 * g + 0.436 * b);
int vValue = (int) (0.615 * r - 0.51498 * g - 0.10001 * b);
yuvData[yIndex++] = (byte) yValue;
if (y % 2 == 0 && x % 2 == 0) {
yuvData[uvIndex++] = (byte) (uValue + 128);
yuvData[uvIndex++] = (byte) (vValue + 128);
}
}
}
return yuvData;
}
반응형
'영상처리' 카테고리의 다른 글
HRV 신호 SDNN RMSSD의 차이 (0) | 2024.05.22 |
---|---|
DSP 옛날기억 끄적끄적 (0) | 2024.05.17 |
DC 성분이란 (DC Component) (0) | 2024.05.14 |
YV12toNV21, YV12toNV12, NV12toYV12, NV21toYV12, NV12toNV21, NV21toNV12 (0) | 2022.06.08 |
yuv crop, flip, rotate 예제 코드 (0) | 2022.06.07 |
댓글