fun decodeToBitMap(data: ByteArray?, frame: Frame): Bitmap? {
try {
//格式成YUV格式
val yuvimage = YuvImage(data, ImageFormat.NV21, frame.size.width,
frame.size.height, null)
val baos = ByteArrayOutputStream()
yuvimage.compressToJpeg(Rect(0, 0, frame.size.width,
frame.size.height), 100, baos)
val bitmap: Bitmap? = bytes2Bimap(baos.toByteArray())
saveImage(bitmap)
} catch (e: Exception) {
e.printStackTrace()
}
return null
}
fun bytes2Bimap(b: ByteArray): Bitmap? {
return if (b.size != 0) {
BitmapFactory.decodeByteArray(b, 0, b.size)
} else {
null
}
}
fun saveImage(bmp: Bitmap?) {
val appDir = File(ExternalStorageUtils.getExternalFilesDir().absolutePath, "Scan")
if (!appDir.exists()) {
appDir.mkdir()
}
val fileName = System.currentTimeMillis().toString() + ".jpg"
val file = File(appDir, fileName)
try {
val fos = FileOutputStream(file)
bmp?.compress(Bitmap.CompressFormat.JPEG, 100, fos)
fos.flush()
fos.close()
} catch (e: FileNotFoundException) {
e.printStackTrace()
} catch (e: IOException) {
e.printStackTrace()
}
}
private Bitmap decodeToBitMap(byte[] data,Frame frame) {
try {
//格式成YUV格式
YuvImage yuvimage = new YuvImage(data, ImageFormat.NV21, frame.getSize().getWidth(),
frame.getSize().getWidth(), null);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
yuvimage.compressToJpeg(new Rect(0, 0, frame.getSize().getWidth(),
frame.getSize().getHeight()), 100, baos);
Bitmap bitmap= bytes2Bimap(baos.toByteArray());
saveImage(bitmap);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private Bitmap bytes2Bimap(byte[] b) {
if (b.length != 0) {
return BitmapFactory.decodeByteArray(b, 0, b.length);
} else {
return null;
}
}
private void saveImage(Bitmap bmp) {
File appDir = new File(ExternalStorageUtils.getExternalFilesDir().getAbsolutePath(), "Scan");
if (!appDir.exists()) {
appDir.mkdir();
}
String fileName = System.currentTimeMillis() + ".jpg";
File file = new File(appDir, fileName);
try {
FileOutputStream fos = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}