相关疑难解决方法(0)

将图像叠加到相机预览SurfaceView上

我有一个SurfaceView用于绘制图像的,我想将它们叠加到手机相机的实时信息中.

目前,SurfaceView包含图像的图像具有白色背景,但如果我将它们叠加到手机的相机源上,则它们必须是透明的.相机和动画绘图不能在同一个上完成SurfaceView.

追求使用涉及管理相机和绘制图像的多个视图的最佳方法是什么?是否可以SurfaceView透明化?

graphics camera android surfaceview

32
推荐指数
4
解决办法
6万
查看次数

setPreviewDisplay和setDisplayOrientation

我对OpenCV的Android相机示例代码感到困惑.他们创建了一个自定义类,它SurfaceHolder.Callback在方法中实现并放入以下行surfaceChanged:

mCamera.setPreviewDisplay(null);
Run Code Online (Sandbox Code Playgroud)

Android文档setPreviewDisplay解释如下:

必须在startPreview()之前调用此方法.一个例外是,如果在调用startPreview()之前未设置预览表面(或设置为null),则可以使用非null参数调用此方法一次以设置预览表面.(这允许相机设置和曲面创建并行发生,节省时间.)预览曲面在预览运行时可能不会改变.

不同寻常的是,OpenCV的代码永远不会setPreviewDisplay使用非null的SurfaceHolder调用.它工作正常,但改变图像的旋转使用setDisplayOrientation不起作用.这条线似乎也没有做任何事情,因为没有它我会得到相同的结果.

如果我setPreviewDisplay使用提供的SurfaceHolder来surfaceChanged代替null,则图像会旋转,但不包括图像处理的结果.我以后也会IllegalArgumentException打电话给我lockCanvas.

这是怎么回事?

以下是其代码中(可能)最相关的部分,略微简化并使用内联方法.这是完整版.

类定义

public abstract class SampleViewBase extends SurfaceView 
    implements SurfaceHolder.Callback, Runnable {
Run Code Online (Sandbox Code Playgroud)

打开相机时

mCamera.setPreviewCallbackWithBuffer(new PreviewCallback() {
    public void onPreviewFrame(byte[] data, Camera camera) {
        synchronized (SampleViewBase.this) {
            System.arraycopy(data, 0, mFrame, 0, data.length);
            SampleViewBase.this.notify(); 
        }
        camera.addCallbackBuffer(mBuffer);
    }
});
Run Code Online (Sandbox Code Playgroud)

当表面发生变化时

/* Now allocate the buffer */
mBuffer = new byte[size];
/* The buffer where …
Run Code Online (Sandbox Code Playgroud)

android android-camera

9
推荐指数
2
解决办法
8207
查看次数

ZXing条形码阅读器:如何在捕获屏幕周围制作自定义边框?

我想在zxing捕捉屏幕(相机屏幕)周围放置自定义边框.我需要做些什么修改?我需要更改哪些活动和布局才能产生这种效果?

java user-interface android zxing

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

如何在android videoplayer上手动绘制圆形,矩形

我只是想在android中的视频播放器(同时视频播放)上手动绘制圆形,矩形或其他东西.是否可能?如果任何代码示例要好得多.

谢谢.

android

8
推荐指数
1
解决办法
1130
查看次数

表面支架上的凸轮图片,绘图:由于表面类型而异常

我使用的是SurfaceView具有SurfaceHolder与在我的测试应用程序相机预览开始.

public class TextLocatorActivity extends Activity {

    private Preview pvw;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        pvw = new Preview(this);
        setContentView(pvw);        
    }   
Run Code Online (Sandbox Code Playgroud)

我想使用CameraPreview(随SDK版本7的SDK Samples一起提供).点击UI即可拍照.这是Preview班级:

public class Preview extends SurfaceView implements OnClickListener, SurfaceHolder.Callback {

SurfaceHolder holder;
Camera cam; 

final static String TAG = "TextLocator:Preview";

Preview(Context context) {
    super(context);

    holder = getHolder();
    holder.addCallback(this);
    this.setOnClickListener(this);
    // seems to be required (although the docs state, this enum is deprecated, as the type will be …
Run Code Online (Sandbox Code Playgroud)

android surfaceview surfaceholder

7
推荐指数
1
解决办法
2899
查看次数

将图像叠加到相机预览SurfaceView上以及如何保存它们?

我有一个用于绘制图像的SurfaceView,我想将它们叠加到手机相机的实时信息中.我已经在相机预览surfaceview上阅读了Overlay图像, 以及如何在android上的相机使用的surfaceview上绘制叠加层

    public class TestCameraOverlayActivity extends Activity { 
         Bitmap bitmap;

         /** Called when the activity is first created. */ 
         @Override 
         public void onCreate(Bundle savedInstanceState) { 
               super.onCreate(savedInstanceState); 
               requestWindowFeature(Window.FEATURE_NO_TITLE); 
               Preview mPreview = new Preview(this); 
               DrawOnTop mDraw = new DrawOnTop(this); 
               bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
               setContentView(mPreview); 
               addContentView(mDraw, new LayoutParams (LayoutParams.WRAP_CONTENT,
               LayoutParams.WRAP_CONTENT)); 
        } 

        class DrawOnTop extends View { 
            public DrawOnTop(Context context) { 
                super(context); 

        } 

        @Override 
        protected void onDraw(Canvas canvas) { 
            Paint paint = new Paint(); 
            paint.setStyle(Paint.Style.STROKE); 
            paint.setColor(Color.BLACK); 
            canvas.drawText("Test Text", 10, 10, …
Run Code Online (Sandbox Code Playgroud)

android

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

防止自定义SurfaceView在其他视图之上绘制

我创建了一个自定义的SurfaceView,用于绘制形状,用户可以缩放和平移视图以与形状进行交互。这一切的伟大工程,但现在的问题是,形状将总是在顶部绘制一切都在我的屏幕上,还对如按钮和textviews其他视图顶部。我尝试过以不同的方式在XML布局中对自定义视图和按钮进行排序,并尝试将视图作为FrameLayouts和RelativeLayouts的父项(如此处建议)。

我希望按钮和其他布局元素浮在我的自定义视图之上。如下图所示,当我平移视图时,矩形将遮盖按钮。

如何防止自定义SurfaceView绘制在所有内容之上?

在此处输入图片说明

我的绘图代码在SurfaceView类的单独线程中运行:

public class CustomShapeView extends SurfaceView implements Runnable, SurfaceHolder.Callback {

/* Other implementation stuff */

@Override
public void run() {
    while (isDrawing) {
        if (!holder.getSurface().isValid())
            continue; //wait till it becomes valid  

        Canvas canvas = null;
        try {
            canvas = holder.lockCanvas(null);
            synchronized (holder) {
                try {
                    lock.lock();                                
                    canvas.concat(sampleMatrix);
                    canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
                    drawShapes(canvas);                     
                } finally {
                    lock.unlock();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (canvas != null) {
                holder.unlockCanvasAndPost(canvas);
            }
        } …
Run Code Online (Sandbox Code Playgroud)

android drawing android-layout

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