相关疑难解决方法(0)

YUV NV21转换为RGB的困惑

根据http://developer.android.com/reference/android/graphics/ImageFormat.html#NV21,NV21是默认使用的格式.

网上有很多关于YUV NV21到RGB转换的代码.但是,当我查看代码时,我怀疑代码的正确性.

第一个组分V应首先出现,然后是第一个组分U.

根据http://wiki.videolan.org/YUV#NV21,NV21 is like NV12, but with U and V order reversed: it starts with V.但是,当我完成代码实现时

[R应该是最显著位置 的根据实施int argbColor.java,R假设是在最显著位置.但是,我经历了以下代码实现

我想知道,他们是否犯了常见错误,或者我忽略了什么?

目前,我的实施如下.

public static void YUV_NV21_TO_RGB(int[] argb, byte[] yuv, int width, int height) {
    final int frameSize = width * height;

    final int ii = 0;
    final int ij = 0;
    final int …
Run Code Online (Sandbox Code Playgroud)

android nv12-nv21

32
推荐指数
1
解决办法
3万
查看次数

将相机预览适合大于显示器的SurfaceView

我有一个Android应用程序需要全屏一个摄像头预览,无论预设大小getSupportedPreviewSizes()没有失真.我希望这可以在高度或宽度上裁剪一些预算,但这并不关心我.我寻求这样做的原因是因为某些安卓摄像头(例如三星Galaxy SII前置摄像头)不会返回任何与显示器具有相同宽高比的预览,因此需要拉伸和剪裁.

是否可以将相机预览完全增加到大于显示尺寸的视图?通过简单地将曲面视图的布局参数设置为match_parent,可以使SurfaceView大于返回的预览像素尺寸,但这会导致某些方向的失真,并且只有在预览填充显示之前才可能.这似乎表明在显示器外部进行预览是不可能的,并且硬件(或OS)限制了这种行为.

关于这个主题还有另一个问题,但是这个问题声称不可能创建一个大于屏幕尺寸的SurfaceView,这是错误的,正如我在日志记录中发现的那样.然而,似乎情况是相机预览无法增长到庞大的SurfaceView的全尺寸.

我的尝试:

我有一个相对布局,在它内部是一个FrameLayout,在其中我创建了一个SurfaceView.整个相对布局的宽度设置在635dp以下,这是设备屏幕尺寸的两倍.FrameLayout匹配此大小,SurfaceView也是如此(稍后以编程方式添加)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/camera_activity_layout"
    android:layout_width="635dp"
    android:layout_height="match_parent" >

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

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

以下是获取和设置预览大小的代码.在这里,我想让相机预览展开以填充整个FrameLayout(屏幕宽度的两倍).视图完全正常显示和破坏,因此我删除与此特定问题无关的代码,因为它分散了基本问题,并且我尝试轻松简单地将视图扩展为大于显示大小的视图.

public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {

    ...

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
        Camera.Parameters parameters = mCamera.getParameters();
        final DisplayMetrics dm = this.getResources().getDisplayMetrics();
            //getBestPreviewSize returns the best preview size, don't worry
            //but some devices do not return one for all camera matching the aspect ratio
        cameraSize = getBestPreviewSize(parameters, dm.heightPixels, dm.widthPixels); …
Run Code Online (Sandbox Code Playgroud)

android surfaceview android-layout android-camera

23
推荐指数
1
解决办法
2万
查看次数

Android SDK:获取原始预览相机图像而不显示它

我想用原始图像进行图像处理而不在屏幕上显示,这显然会降低性能.

根据这个线程的答案从相机拍摄照片没有预览,这在Android 1.5中是不可能的,但有人知道它是否可以在Android 4(API级别15)?

android

20
推荐指数
1
解决办法
2万
查看次数

将自定义滤镜应用于相机输出

如何将自定义滤镜应用于相机输出中的单个帧,并显示它们.

到目前为止我尝试过的:

mCamera.setPreviewCallback(new CameraGreenFilter());

public class CameraGreenFilter implements PreviewCallback {

    @Override
    public void onPreviewFrame(byte[] data, Camera camera) {
        final int len = data.length;
        for(int i=0; i<len; ++i){
            data[i] *= 2;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
  • 虽然它的名字包含"绿色",但我实际上只是想以某种方式修改这些值(在这种情况下,颜色会稍微加强一些).长话短说,它不起作用.

  • 我发现字节数组'data'是摄像头输出的副本; 但这并没有真正帮助,因为我需要'真正的'缓冲区.

  • 我听说你可以用openGL来实现它.这听起来很复杂.

有没有更简单的方法?否则,这个openGL-surfaceView映射将如何工作?

camera android opengl-es filter

16
推荐指数
1
解决办法
3万
查看次数