在錄像時設置了YV12要保存圖片時
YUV420P、I420、NV12、YV12格式轉NV12保存圖片
GLSurfaceView implements SurfaceHolder.Callback, Camera.PreviewCallback {
}
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewFormat(ImageFormat.YV12);
在使用camera設置為YV12或者NV12時要轉換時所用的工具
FileClientSender fileSender;UDPClientSender udpSender;
private ExecutorService executorService;
public static boolean isAll =
true;
boolean isOpen =
false;
@Overridepublic void onPreviewFrame(
final byte[] data,
final Camera camera) {
final int ret = avcCodec.offerEncoder(data, h264);
new Thread(
new Runnable() {
@Overridepublic void run() {
if (MainActivity.client !=
null) {udpSender.send(h264, ret);}}}).start();
if (isAll) {
if (isOpen) {customSurfaceView.setVisibility(VISIBLE);isOpen =
false;}
new Thread(
new Runnable() {
@Overridepublic void run() {fileSender.send(h264, ret);}}).start();
new Thread(
new Runnable() {
@Overridepublic void run() {
long l = System.currentTimeMillis();
if (keybs) {uploodTask(data, l);}
else {
if (uploadInt ==
20) {uploodTask(data, l);uploadInt =
0;}
else {uploadInt++;}}}}).start();}camera.addCallbackBuffer(data);}
int uploadInt =
0;
public boolean keybs =
false;
@SuppressLint(
"NewApi")
private void uploodTask(
final byte[] data,
final long l) {
new AsyncTask<String, Void, Boolean>() {
@Overrideprotected Boolean
doInBackground(String... params) { File file =
new File(SavaFileNameUtil.getImageRoot() +SavaFileNameUtil.getCaptureImageName(Config.USER_NUMBER));
try {
byte[] NV21 =
new byte[MAX_SEND_SIZE];Yuv.YV12toNV21(data, NV21, PREVIEW_WIDTH, PREVIEW_HEIGHT);Bitmap bmp = Yuv.NV21ToBitmap(NV21, PREVIEW_WIDTH, PREVIEW_HEIGHT);Date date =
new Date(l);SimpleDateFormat dateFormat =
new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");bmp = createWaterMark(bmp,
null, dateFormat.format(date));FileOutputStream outStream =
new FileOutputStream(file);bmp.compress(Bitmap.CompressFormat.JPEG,
100, outStream);outStream.close();LogUtils.e(TAG +
"======================Ftp4jUtil",
"圖片寫入完成----------------------------------");
if (keybs) {upload(file, ftpPath,
null,
false);keybs =
false;}
else {upload(file, ftpPath +
"_auto",
null,
false);}}
catch (Exception e) {e.printStackTrace();LogUtils.e(TAG,
"Ftp4jUtil圖片寫入出現異常", e);}
return true;}
}.execute(
""); }
如果要保存圖片,或著保存視頻時使用的一個工具類
YUV420P、I420、NV12、YV12格式轉NV12保存圖片
// 將yv12的幀轉化為h254的幀
?如果你輸出格式是nv21 或者 yuy2 轉圖片
YUV420P、YV12、NV12、YV12格式轉NV12保存圖片
總結
以上是生活随笔為你收集整理的YV12toI420 yuv420、NV12、YV12相互转换的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。