1. 缩放RGBA
private byte[] scaleRGBA(final byte[] data
, int scale
, final int cameraWidth
, final int cameraHeight
, int[] outSize) {
int w = cameraWidth / scale;
int h = cameraHeight / scale;
outSize[0] = w;
outSize[1] = h;
int index = 0;
byte[] result = new byte[w * h * 4];
for (int j = 0; j < cameraHeight; j += scale) {
int width_count = cameraWidth * 4;
int offset = j * width_count;
for (int i = 0; i < width_count; i += 4 * scale) {
result[index++] = data[offset + i];
result[index++] = data[offset + i + 1];
result[index++] = data[offset + i + 2];
result[index++] = data[offset + i + 3];
}
}
return result;
}
2. 缩放YUV
public static byte[] scaleUV420(byte[] data, int width, int height, int scale, int[] sz) {
Log.e("wangshuai", "data length is " + data.length);
int w = width / scale;
int h = height / scale;
if (w % 2 == 1) {
w += 1;
}
if (h % 2 == 1) {
h += 1;
}
sz[0] = w;
sz[1] = h;
byte[] yuv = new byte[w * h + w * h / 2];
int i = 0;
for (int k = 0; k < height; k += scale) {
for (int m = 0; m < width; m += scale) {
yuv[i] = data[k * width + m];
i++;
}
}
int size = width * height;
i = w * h;
for (int k = 0; k < height / 2; k += scale) {
for (int m = 0; m < width; m += (2 * scale)) {
if(i< yuv.length) {
yuv[i] = data[size + (k * width) + m];
i++;
}
if(i< yuv.length) {
yuv[i] = data[size + (k * width) + m + 1];
i++;
}
}
}
assert (i == size + size / 2);
return yuv;
}
3. YUV转bitmap
static public void decodeYUV420SP(int[] rgb, byte[] yuv420sp, int width,
int height) {
Log.e("wangshuai", "decodeYUV420SP width is " + width);
Log.e("wangshuai", "decodeYUV420SP height is " + height);
Log.e("wangshuai", "decodeYUV420SP yuv420sp is " + yuv420sp.length);
final int frameSize = width * height;
for (int j = 0, yp = 0; j < height; j++) {
int uvp = frameSize + (j >> 1) * width, u = 0, v = 0;
for (int i = 0; i < width; i++, yp++) {
int y = (0xff & ((int) yuv420sp[yp])) - 16;
if (y < 0)
y = 0;
if ((i & 1) == 0) {
v = (0xff & yuv420sp[uvp++]) - 128;
u = (0xff & yuv420sp[uvp++]) - 128;
}
int y1192 = 1192 * y;
int r = (y1192 + 1634 * v);
int g = (y1192 - 833 * v - 400 * u);
int b = (y1192 + 2066 * u);
if (r < 0)
r = 0;
else if (r > 262143)
r = 262143;
if (g < 0)
g = 0;
else if (g > 262143)
g = 262143;
if (b < 0)
b = 0;
else if (b > 262143)
b = 262143;
rgb[yp] = 0xff000000 | ((r << 6) & 0xff0000) | ((g >> 2) &
0xff00) | ((b >> 10) & 0xff);
}
}
}
分享到:
相关推荐
总结来说,Android原生的人脸识别功能可以通过`Camera`和`Camera2` API实现。`Camera` API适合简单的应用,而`Camera2` API则为需要精细控制和高性能的应用提供了更多可能。开发者应根据项目需求和目标平台选择合适...
### Android Camera调试总结 在Android系统的开发过程中,经常会遇到与Camera相关的各种问题,这些问题往往涉及到硬件、驱动以及软件等多个层面。本文将根据实际项目经验,总结归纳几个在Android平台上进行Camera...
总结,掌握Android原生Camera2 API不仅需要理解各种类和接口的用法,还需要熟悉Android的生命周期管理和多线程处理。通过实践和调试CameraDemo2这样的示例项目,开发者可以逐步提高在Android相机开发上的技能。
总结来说,“android Camera源码(可用)”是一个有价值的资源,可以帮助开发者深入了解Android相机功能的实现,提升他们在实际项目中的开发效率和质量。通过阅读和分析这个源码,开发者可以更好地理解和掌握Camera ...
在Android平台上,相机功能是应用开发中的重要组成部分。本文将深入探讨`android-Camera-Code.zip`中的相机应用示例,以及如何在Eclipse环境中进行导入和编译。这个压缩包包含了一个完整的Android相机工程,提供了对...
总结,"android-Camera2Basic-master"源码为我们提供了一个了解和学习Camera2 API的良好起点。通过对源码的详细解读,开发者能更好地理解和实践如何在Android应用中集成和控制相机,从而创建出更丰富的相机功能。
总结,AndroidCamera2BasicApp作为学习和实践Camera2 API的实例,帮助我们理解如何利用新API实现一个基本的相机应用。通过深入研究和实践,开发者可以进一步开发出满足专业摄影需求的复杂应用,提升Android设备的...
在具体实现代码之前,我们先来了解一下Android api对实现自定义Camera的介绍。 根据api的介绍,对于Camera应用可以简单总结以下几个步骤。 1.检查Camera是否存在,并在AndroidManifest.xml中赋予相关的权限; 2....
### Android Camera框架详解 #### 一、总体架构与工作原理 Android Camera框架作为一个重要的多媒体组件,在Android设备上扮演着至关重要的角色。它不仅为开发者提供了一套完整的API用于摄像头功能的开发,还确保...
总结,Android 4.0的Camera API改进显著提升了相机功能的可定制性和性能,为开发者提供了更多创造出色拍照和录像应用的可能性。理解和熟练运用这两个API对于Android应用开发尤其是摄影类应用至关重要。
总结来说,Android的HAL层下的camera实现是一个复杂的系统工程,涉及到硬件驱动、接口定义、流处理、性能优化等多个方面。虽然这部分代码不对外公开,但了解其工作原理对于Android相机应用的开发者和系统工程师而言...
总结来说,Android Camera API提供了一套完整的框架,用于实现相机数据的预览和处理。通过自定义相机视图,我们可以实时获取到相机的帧数据,然后进行图像转换和处理,例如面部识别。利用定时任务,可以按照指定频率...
总结来说,Android Camera模块的运行依赖于JNI来桥接Java和原生代码,Mediaserver进程中的CameraService负责处理相机相关的操作。Binder机制则确保了JAVA应用进程与CameraService进程间的高效、安全通信,使得应用...
总结,Android 4.0 Camera源码包含了从硬件抽象层到用户界面的整个摄像头系统的实现,涉及设备管理、参数设置、预览、拍照、录像等多个环节。理解这些核心概念和机制对于开发复杂的相机应用或优化现有功能至关重要。...
总结起来,Android Camera聚焦涉及了相机对象的获取、SurfaceView的使用、相机参数的设置、对焦机制的实现、拍照功能的调用以及图像的后期处理。掌握这些知识点,开发者就能创建出功能丰富的相机应用,满足用户多样...
Android Camera架构解析 Android Camera架构的设计是基于组件化和进程间通信(IPC)的,主要由客户端(Client)和服务器(Server)两大部分组成。...理解这一架构对于开发或优化Android Camera应用至关重要。
总结一下,这个“Android-AndroidCamera内置人脸识别的Demo”涵盖了以下关键知识点: 1. Android Camera API:如何开启和控制摄像头,以及获取图像数据。 2. FaceDetector类:使用此类在图像中检测人脸,获取位置和...