private Bitmap getBitmap(Rect cropRect, int scaleFactor) { if(isRotated()) { //noinspection SuspiciousNameCombination cropRect = new Rect(cropRect.top, cropRect.left, cropRect.bottom, cropRect.right); } // TODO: there should be a way to do this without JPEG compression / decompression cycle. YuvImage img = new YuvImage(data, imageFormat, dataWidth, dataHeight, null); ByteArrayOutputStream buffer = new ByteArrayOutputStream(); img.compressToJpeg(cropRect, 90, buffer); byte[] jpegData = buffer.toByteArray(); BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = scaleFactor; Bitmap bitmap = BitmapFactory.decodeByteArray(jpegData, 0, jpegData.length, options); // Rotate if required if (rotation != 0) { Matrix imageMatrix = new Matrix(); imageMatrix.postRotate(rotation); bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), imageMatrix, false); } return bitmap; }
public YuvImageAssert hasHeight(int height) { isNotNull(); int actualHeight = actual.getHeight(); assertThat(actualHeight) // .overridingErrorMessage("Expected height <%s> but was <%s>.", height, actualHeight) // .isEqualTo(height); return this; }
public YuvImageAssert hasWidth(int width) { isNotNull(); int actualWidth = actual.getWidth(); assertThat(actualWidth) // .overridingErrorMessage("Expected width <%s> but was <%s>.", width, actualWidth) // .isEqualTo(width); return this; }
/** * frame call back function * @param data * @param camera */ public void onPreviewFrame(byte[] data,Camera camera){ try{ //convert YuvImage(NV21) to JPEG Image data YuvImage yuvimage=new YuvImage(data,ImageFormat.NV21,this.width,this.height,null); System.out.println("WidthandHeight"+yuvimage.getHeight()+"::"+yuvimage.getWidth()); ByteArrayOutputStream baos=new ByteArrayOutputStream(); yuvimage.compressToJpeg(new Rect(0,0,this.width,this.height),100,baos); mFrameBuffer = baos; }catch(Exception e){ Log.d("parse","errpr"); } }
/** * Note: This conversion procedure is sloppy and may result in JPEG compression artifacts * * @param yuvImage - The YuvImage to convert * @return - The converted Bitmap */ public static Bitmap convertYuvImageToBitmap(@NonNull final YuvImage yuvImage) { ByteArrayOutputStream out = new ByteArrayOutputStream(); yuvImage.compressToJpeg(new Rect(0, 0, yuvImage.getWidth(), yuvImage.getHeight()), 100, out); byte[] imageBytes = out.toByteArray(); try { out.close(); } catch (IOException e) { Log.e(LOG_TAG, "Exception while closing output stream", e); } return BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length); }
private YuvImage fastI420ToYuvImage(ByteBuffer[] yuvPlanes, int[] yuvStrides, int width, int height) { byte[] bytes = new byte[width * height * 3 / 2]; int i = 0; for (int row = 0 ; row < height ; row++) { for (int col = 0 ; col < width ; col++) { bytes[i++] = yuvPlanes[0].get(col + row * yuvStrides[0]); } } for (int row = 0 ; row < height / 2 ; row++) { for (int col = 0 ; col < width / 2; col++) { bytes[i++] = yuvPlanes[2].get(col + row * yuvStrides[2]); bytes[i++] = yuvPlanes[1].get(col + row * yuvStrides[1]); } } return new YuvImage(bytes, NV21, width, height, null); }
public YuvImageAssert hasYuvFormat(int format) { isNotNull(); int actualFormat = actual.getYuvFormat(); assertThat(actualFormat) // .overridingErrorMessage("Expected YUV format <%s> but was <%s>.", format, actualFormat) // .isEqualTo(format); return this; } }
YuvImage image = new YuvImage(data, ImageFormat.NV21, width, height, null); image.compressToJpeg( new Rect(0, 0, image.getWidth(), image.getHeight()), 90, filecon); // 将NV21格式图片,以质量70压缩成Jpeg,并得到JPEG数据流 filecon.close();
private Bitmap captureBitmapFromYuvFrame(I420Frame i420Frame) { YuvImage yuvImage = i420ToYuvImage(i420Frame.yuvPlanes, i420Frame.yuvStrides, i420Frame.width, i420Frame.height); ByteArrayOutputStream stream = new ByteArrayOutputStream(); Rect rect = new Rect(0, 0, yuvImage.getWidth(), yuvImage.getHeight()); // Compress YuvImage to jpeg yuvImage.compressToJpeg(rect, 100, stream); // Convert jpeg to Bitmap byte[] imageBytes = stream.toByteArray(); Bitmap bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length); Matrix matrix = new Matrix(); // Apply any needed rotation matrix.postRotate(i420Frame.rotationDegree); bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); return bitmap; }
public static Bitmap getBitmapFromYuvFrame(@NonNull final Frame frame) { byte[] pixels = ((Frame.ByteArrayFrame) frame).getByteArray(); YuvImage yuvImage = new YuvImage(pixels, ImageFormat.NV21, frame.getWidth(), frame.getHeight(), null); return convertYuvImageToBitmap(yuvImage); }
public YuvImageAssert hasYuvFormat(int format) { isNotNull(); int actualFormat = actual.getYuvFormat(); assertThat(actualFormat) // .overridingErrorMessage("Expected YUV format <%s> but was <%s>.", format, actualFormat) // .isEqualTo(format); return this; } }
private void yuvToJpeg(byte[] data, int width, int height, int quality, String path) throws IOException { YuvImage yuvimage = new YuvImage(data, ImageFormat.NV21, width, height, null); FileOutputStream fos = null; try { fos = new FileOutputStream(path); yuvimage.compressToJpeg(new Rect(0, 0, width, height), quality, fos); } finally { if (fos != null) { fos.close(); } } }
synchronized (frameLock) { Size cameraImageSize = parameters.getPreviewSize(); YuvImage image = new YuvImage(frame, parameters.getPreviewFormat(), cameraImageSize.width, cameraImageSize.height, null); ByteArrayOutputStream tmpBuffer = new ByteArrayOutputStream(); image.compressToJpeg(new Rect(0, 0, image.getWidth(), image.getHeight()), 67, tmpBuffer); this.frameBuffer = tmpBuffer.toByteArray(); this.frameID++;
Rect rect = new Rect(0, 0, yuvImage.getWidth(), yuvImage.getHeight()); yuvImage.compressToJpeg(rect, 100, stream);
return new YuvImage(bytes, NV21, width, height, null);
public YuvImageAssert hasHeight(int height) { isNotNull(); int actualHeight = actual.getHeight(); assertThat(actualHeight) // .overridingErrorMessage("Expected height <%s> but was <%s>.", height, actualHeight) // .isEqualTo(height); return this; }
public YuvImageAssert hasWidth(int width) { isNotNull(); int actualWidth = actual.getWidth(); assertThat(actualWidth) // .overridingErrorMessage("Expected width <%s> but was <%s>.", width, actualWidth) // .isEqualTo(width); return this; }
public Bitmap decodeToBitMap(byte[] data) { Bitmap bmp = null; try { YuvImage image = new YuvImage(data, ImageFormat.NV21, width, width, null); if (image != null) { Log.d("Fuck", "image != null"); ByteArrayOutputStream stream = new ByteArrayOutputStream(); image.compressToJpeg(new Rect(0, 0, width, width), 80, stream); bmp = BitmapFactory.decodeByteArray(stream.toByteArray(), 0, stream.size()); stream.close(); } } catch (Exception ex) { Log.e("Fuck", "Error:" + ex.getMessage()); } return bmp; }
fos = new FileOutputStream(f); if (data.length < 35000) { YuvImage image = new YuvImage(nv21, ImageFormat.NV21, PREVIEW_WIDTH, PREVIEW_HEIGHT, null); //将NV21 data保存成YuvImage image.compressToJpeg( new Rect(0, 0, image.getWidth(), image.getHeight()), 100, fos); Log.i(TAG, "onPictureTaken_data.length<20000: " + data.length);
private void compressToJpeg(String fileName, Image image) { FileOutputStream outStream; try { outStream = new FileOutputStream(fileName); } catch (IOException ioe) { throw new RuntimeException("Unable to create output file " + fileName, ioe); } Rect rect = image.getCropRect(); YuvImage yuvImage = new YuvImage(getDataFromImage(image, COLOR_FormatNV21), ImageFormat.NV21, rect.width(), rect.height(), null); yuvImage.compressToJpeg(rect, 100, outStream); } }