当前位置: 首页 > news >正文

拟定建设方案物流网站做特产网站的原因

拟定建设方案物流网站,做特产网站的原因,软件公司开发,微网站是用什么代码制作目录 java imagereader编码保存 java NV21toYUV420SemiPlanar 编码保存视频用#xff1a; imageReader获取nv21 jni NV12toYUV420SemiPlanar函数#xff1a; 代码来自博客#xff1a; 【Android Camera2】彻底弄清图像数据YUV420_888转NV21问题/良心教学/避坑必读!_yuv…目录 java imagereader编码保存 java NV21toYUV420SemiPlanar 编码保存视频用 imageReader获取nv21 jni NV12toYUV420SemiPlanar函数 代码来自博客 【Android Camera2】彻底弄清图像数据YUV420_888转NV21问题/良心教学/避坑必读!_yuv420888转nv21_奔跑的鲁班七号的博客-CSDN博客 java imagereader编码保存 //Planar格式P的处理private static ByteBuffer getuvBufferWithoutPaddingP(ByteBuffer uBuffer,ByteBuffer vBuffer, int width, int height, int rowStride, int pixelStride){int pos 0;byte []byteArray new byte[height*width/2];for (int row0; rowheight/2; row) {for (int col0; colwidth/2; col) {int vuPos col*pixelStride row*rowStride;byteArray[pos] vBuffer.get(vuPos);byteArray[pos] uBuffer.get(vuPos);}}ByteBuffer bufferWithoutPaddingsByteBuffer.allocate(byteArray.length);// 数组放到buffer中bufferWithoutPaddings.put(byteArray);//重置 limit 和postion 值否则 buffer 读取数据不对bufferWithoutPaddings.flip();return bufferWithoutPaddings;}//Semi-Planar格式SP的处理和y通道的数据private static ByteBuffer getBufferWithoutPadding(ByteBuffer buffer, int width, int rowStride, int times,boolean isVbuffer){if(width rowStride) return buffer; //没有buffer,不用处理。int bufferPos buffer.position();int cap buffer.capacity();byte []byteArray new byte[times*width];int pos 0;//对于y平面要逐行赋值的次数就是height次。对于uv交替的平面赋值的次数是height/2次for (int i0;itimes;i) {buffer.position(bufferPos);//part 1.1 对于u,v通道,会缺失最后一个像u值或者v值因此需要特殊处理否则会crashif(isVbuffer itimes-1){width width -1;}buffer.get(byteArray, pos, width);bufferPos rowStride;pos poswidth;}//nv21数组转成buffer并返回ByteBuffer bufferWithoutPaddingsByteBuffer.allocate(byteArray.length);// 数组放到buffer中bufferWithoutPaddings.put(byteArray);//重置 limit 和postion 值否则 buffer 读取数据不对bufferWithoutPaddings.flip();return bufferWithoutPaddings;}private static byte[] YUV_420_888toNV21(Image image) {int width image.getWidth();int height image.getHeight();ByteBuffer yBuffer getBufferWithoutPadding(image.getPlanes()[0].getBuffer(), image.getWidth(), image.getPlanes()[0].getRowStride(),image.getHeight(),false);ByteBuffer vBuffer;//part1 获得真正的消除padding的ybuffer和ubuffer。需要对P格式和SP格式做不同的处理。如果是P格式的话只能逐像素去做性能会降低。if(image.getPlanes()[2].getPixelStride()1){ //如果为true说明是P格式。vBuffer getuvBufferWithoutPaddingP(image.getPlanes()[1].getBuffer(), image.getPlanes()[2].getBuffer(),width,height,image.getPlanes()[1].getRowStride(),image.getPlanes()[1].getPixelStride());}else{vBuffer getBufferWithoutPadding(image.getPlanes()[2].getBuffer(), image.getWidth(), image.getPlanes()[2].getRowStride(),image.getHeight()/2,true);}//part2 将y数据和uv的交替数据除去最后一个v值赋值给nv21int ySize yBuffer.remaining();int vSize vBuffer.remaining();byte[] nv21;int byteSize width*height*3/2;nv21 new byte[byteSize];yBuffer.get(nv21, 0, ySize);vBuffer.get(nv21, ySize, vSize);//part3 最后一个像素值的u值是缺失的因此需要从u平面取一下。ByteBuffer uPlane image.getPlanes()[1].getBuffer();byte lastValue uPlane.get(uPlane.capacity() - 1);nv21[byteSize - 1] lastValue;return nv21;}java NV21toYUV420SemiPlanar 编码保存视频用 public byte[] NV21toYUV420SemiPlanar(byte[] nv21, int width, int height) {byte[] yuv420sp new byte[width * height * 3 / 2];int frameSize width * height;int i, j;System.arraycopy(nv21, 0, yuv420sp, 0, frameSize); // Y分量直接复制for (i 0; i frameSize / 4; i) {j i * 2;// NV21的UV分量交替排列转为NV12需要调换U和V的位置yuv420sp[frameSize j] nv21[frameSize j 1]; // U分量yuv420sp[frameSize j 1] nv21[frameSize j]; // V分量}return yuv420sp;} imageReader获取nv21 plane[0] plane[2] NV21;; plane[0] plane[1] NV12 Image image reader.acquireLatestImage(); if (image null) {return; }Image.Plane[] planes image.getPlanes();ByteBuffer yBuffer image.getPlanes()[0].getBuffer(); int ySize yBuffer.remaining();ByteBuffer vBuffer image.getPlanes()[2].getBuffer(); int vSize vBuffer.remaining();byte[] nv21_s new byte[WIDTH*HEIGHT * 3 / 2];try {yBuffer.get(nv21_s, 0, yBuffer.remaining());vBuffer.get(nv21_s, ySize, vBuffer.remaining());imageQueue.put(nv21_s); } catch (Exception e) {throw new RuntimeException(e); }image.close(); 注 1.这种方式会缺最后一个像素的U分量或V分量如果追求完美对NV21可以从plane[1]中取出最后的值追加到末尾对NV12则是在plane[2]中取出最后的值追加到末尾 2.只适用于图像宽度为8的整数倍的情况否则因为需要做内存对齐后面会补0,导致image.getWidth() plane.getRowStride()这就需要对每一行舍去后面多余的0然后再拼接效率会低很多。 jni NV12toYUV420SemiPlanar函数 public native byte[] NV12toYUV420SemiPlanar(byte[] data, int w, int h); extern CJNIEXPORT jbyteArray JNICALL Java_com_sandstar_ai_objectdetector_ObjectDetector_NV12toYUV420SemiPlanar(JNIEnv* env, jobject, jbyteArray nv12, jint width, jint height) {jbyte* nv12_bytes env-GetByteArrayElements(nv12, NULL);jsize nv21_length env-GetArrayLength(nv12);int frameSize width * height;std::vectoruint8_t yuv420sp(nv21_length);std::memcpy(yuv420sp.data(), nv12_bytes, frameSize); // copy Yfor (int i 0; i frameSize / 4; i) {int j i * 2;yuv420sp[frameSize j] nv12_bytes[frameSize j 1]; // copy Vyuv420sp[frameSize j 1] nv12_bytes[frameSize j]; // copy U}env-ReleaseByteArrayElements(nv12, nv12_bytes, 0);// Create a new byte array and put the data into itjbyteArray result env-NewByteArray(nv21_length);env-SetByteArrayRegion(result, 0, nv21_length, reinterpret_castjbyte*(yuv420sp.data()));return result; }
http://www.hkea.cn/news/14472876/

相关文章:

  • 酒泉建设局网站wordpress中英文插件
  • phpcms电影网站开发在哪可以做网站
  • 宜昌哪里有做网站的域名查ip
  • 南昌做网站装修的企业沈阳建设工程交易中心官网
  • 做移动类网站的书推荐免费云虚拟主机
  • 怎样看一个网站是不是织梦做的百度广告一天多少钱
  • 建站公司哪家好 都选万维科技建设网站和别人公司重名
  • 培训网站模板免费备案增加网站
  • 曹县 做网站的公司进网站备案
  • 网络营销导向企业网站建设的一般原则是什么?网站技术方案怎么写
  • 网站系统与程序的链接广州网站建设公司有哪些
  • 内网建站工具长沙网上注册公司流程
  • 菏泽市建设局网站建设设计院网站
  • 网站建设人员职责手机网站建设要素
  • 做外贸有哪些网站平台九江市建设工程门户网站
  • 青岛国家高新区建设局网站广州工商学院门户网站
  • 网站建设德语wordpress portfolio 插件
  • 有没有个人网站wordpress外贸建站主题
  • 查建设公司资质的网站郑州市建设工程信息网官网
  • 丝芙兰网站做的好差pc网站开发
  • 模板网站建设报价一个网站建设花了10万元
  • 了解目前网站建设情况苏州建交建设工程有限公司
  • 网站建设需要钱吗临海市住房和城乡建设规划局 网站
  • 美乐乐是哪个公司做的网站北京最新发布信息
  • 丰台广州网站建设网站推广途径有哪些
  • 怎么在建设银行网站挂号公司网页设计
  • 电视台视频网站建设方案xampp做网站
  • 广州在线网站制作现在较为常用的网站开发技术
  • 微信开发小程序开发网站建设网络推广运营外包公司
  • 网站建设费用是多少钱网站开发基础与提高