【发布时间】:2016-01-17 23:37:54
【问题描述】:
我正在尝试从 Android 相机预览中拍摄的图片中获取 RGB 值流。
所以我查了很多关于 Stackoverflow 和在线教程的问题,我已经走到了这一步:
设置以下相机属性:
Camera.Parameters param = camera.getParameters();
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int swidth = size.x;
int sheight = size.y;
param.setPreviewSize(sheight, swidth);
camera.setParameters(param);
param.setPreviewFormat(ImageFormat.NV21);
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
camera.setDisplayOrientation(90);
param.setPreviewFormat(ImageFormat.NV21); 是为了兼容所有设备。
那么我有:
jpegCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
int[] rgbs = new int[swidth*sheight]; //from above code
decodeYUV(rgbs, data, swidth, sheight);
for(int i = 0; i<rgbs.length; i++)
System.out.println("RGB: " + rgbs[i]);
其中decodeYUV() 是给定here on SO 的方法。我已经尝试使用这两个答案(方法),并且得到了类似的结果。这意味着它必须工作,我只是做错了。
现在,我假设它是 ARGB 格式。
我从上面的代码中得到以下输出流:
RGB: -16757489
RGB: -16059990
RGB: -9157
RGB: -49494
RGB: -2859008
RGB: -7283401
RGB: -4288512
RGB: -3339658
RGB: -6411776
RGB: -13994240
RGB: -16750475
RGB: -16735438
RGB: -14937280
RGB: -3866455
RGB: -16762040
RGB: -16714621
RGB: -11647630
RGB: -37121
...
...
如何从中提取 RGB 值,格式为 R/G/B = [0..255]?
感谢您的帮助!
【问题讨论】: