SurfaceView正在交换红色和蓝色Google Glass相机的颜色

时间:2014-07-08 15:48:03

标签: android camera google-glass google-gdk

由于一些奇怪的原因,surfaceView显示的图像很好,但红色和蓝色通道交换。我使用的代码与Github project中的代码基本相同,但有一些细微的变化。

我使用它的代码是:

public class CameraView extends SurfaceView implements SurfaceHolder.Callback{

private SurfaceHolder surfaceHolder = null;
private Camera camera = null;

public CameraView(Context context) {
    super(context);
    surfaceHolder = this.getHolder();
    surfaceHolder.addCallback(this);
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
    camera = Camera.open();
    Parameters parameters = camera.getParameters();
    parameters.setPreviewFpsRange(30000, 30000);            
    camera.setParameters(parameters);   
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    if (camera != null){                    // Start the preview for surfaceChanged
        try {
            camera.setPreviewDisplay(holder);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            this.releaseCamera();
        }
        camera.startPreview();
    }
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    this.releaseCamera();                   // Do not hold the camera during surfaceDestroyed - view should be gone...
}

public void releaseCamera() {
    if (camera != null) {
        camera.release();
        camera = null;
    }
}

}

为什么这种颜色交换的想法?

5 个答案:

答案 0 :(得分:6)

我有同样的问题,它让我发疯了。经过大量的努力,我发现,由于某些奇怪的原因,当布局只包含FrameLayout时,会发生这种情况,而FrameLayout只包含相机的SurfaceView而没有其他布局元素。 在我的情况下,我在FrameLayout上添加了空TextView并解析了它。奇怪但工作。 (最终我用这个TextView显示文本,所以这就是样式和位置属性的原因)

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="${relativePackage}.${activityClass}"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/CameraView" />

 <TextView
    android:id="@+id/status_text"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="5dip"
    android:layout_gravity="center_horizontal|top"

    android:padding="5dip"
    android:textColor="#000000"

    android:text="" />

答案 1 :(得分:2)

我遇到了同样的问题。 我找到的解决方法是在屏幕上放置一个边距。

dimens.xml

  <dimen name="glass_video_margin">1px</dimen>

layout_activity.xml

    <VideoView
    android:id="@+id/vid_back"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/glass_video_margin"
     />

答案 2 :(得分:0)

您是否将活动的ContentView设置为CameraView?如果是这样,则会发生此问题。我在下面的代码中遇到了同样的问题。

@Override
protected void onResume() {
    super.onResume();
    cameraPreview = new CameraPreview(this);
    // setUpCameraPreview();
    setContentView(cameraPreview);
}

稍后我使用以下内容创建了activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/black"
    tools:context="com.arun.camera.CustomCamera">

    <FrameLayout
        android:id="@+id/cameraPreview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</FrameLayout>

然后我在我的onCreate中创建了相机预览,如下所示,所以事情就好了。我的onCreate现在看起来如下。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    previewLayout = (FrameLayout) this.findViewById(R.id.cameraPreview);
    cameraPreview = new CameraPreview(this);
    previewLayout.addView(cameraPreview);
}

答案 3 :(得分:0)

我遇到了同样的问题,但不仅仅是相机视频预览。 我解决了 我在androidmanifest.xml活动部分添加了android:hardwareAccelerated =“true”。 现在工作正常。 (对不起,我的英文不好。)

答案 4 :(得分:-1)

这个问题可能有关:

Glass camera preview display is garbled