jjzjj

android - 表面支架上的凸轮图片,绘制 : Exception because of surface type

coder 2023-11-25 原文

我使用带有 SurfaceHolderSurfaceView 在我的测试应用程序中开始相机预览。

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);        
    }   

我想使用 CameraPreview(随 SDK 版本 7 的 SDK 示例一起提供)。单击 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 chosen automatically...
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

public void surfaceCreated(SurfaceHolder holder) {
    cam = Camera.open();
    try {
        Camera.Parameters params = cam.getParameters();
        params.set("orientation", "landscape");
        Camera.Size bestSize = getBestPreviewSize(480, 320);
        params.setPreviewSize(bestSize.width, bestSize.height);
        cam.setParameters(params);
        // where to draw:
        cam.setPreviewDisplay(holder);
    } catch (IOException exception) {
        cam.release();
        cam = null;
        // TODO: add more exception handling logic here
    }
}

private Camera.Size getBestPreviewSize(int width, int height)
{
    // checks for supported sizes close to the demanded values - implemented.
}


public void surfaceDestroyed(SurfaceHolder holder) {
    cam.stopPreview();
    cam.release();
    cam = null;
}

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
    Camera.Parameters parameters = cam.getParameters();
    parameters.setPreviewSize(w, h);

    cam.setParameters(parameters);
    cam.startPreview();
}

Camera.PictureCallback picCallback = new Camera.PictureCallback() {

    public void onPictureTaken(byte[] bytes, Camera arg1) {
        synchronized(holder) {
                Canvas c = null;    

                try {
                    c = holder.lockCanvas();                

                    Paint paint = new Paint();
                    paint.setAntiAlias(false);
                    paint.setARGB(200, 120, 180, 0);

                    c.drawLine(10, 10, c.getWidth() - 10, c.getHeight() - 10, paint);
                }
                catch (Exception e) {
                    Log.d(TAG, "Exception: " + e.getMessage());
                    // IllegalArguementException Surface Type is SURFACE_TYPE_PUSH_BUFFERS
                }
                finally {       
                    holder.unlockCanvasAndPost(c);  
                }
            }
    }
};

public void onClick(View v) 
{
    cam.takePicture(null, null, picCallback);    
}

接下来,我尝试对 SurfaceHolder 的相应 Canvas 进行一些额外的绘制。因此,我正在调用 canvas = holder.lockCanvas()。这将导致 IllegalArgumentException 消息:

Surface type is SURFACE_TYPE_PUSH_BUFFERS

现在,docs声明那些表面类型已被弃用,值集将被忽略。但是,只有当我将类型设置为此特定值时,相机预览才有效。

如何在显示拍摄图片的SurfaceViewCanvas上实现绘图?或者应该放在不同的层/ View 上?

最佳答案

您不能既显示相机预览又使用 Canvas 绘图。你必须做其中之一。

关于android - 表面支架上的凸轮图片,绘制 : Exception because of surface type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6336602/

有关android - 表面支架上的凸轮图片,绘制 : Exception because of surface type的更多相关文章

  1. ruby-on-rails - date_field_tag,如何设置默认日期? [ rails 上的 ruby ] - 2

    我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问

  2. ruby-on-rails - openshift 上的 rails 控制台 - 2

    我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新ruby​​gems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems

  3. ruby-on-rails - 相关表上的范围为 "WHERE ... LIKE" - 2

    我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que

  4. ruby-on-rails - Ruby on Rails - 为文本区域和图片生成列 - 2

    我是Rails的新手,所以请原谅简单的问题。我正在为一家公司创建一个网站。那家公司想在网站上展示它的客户。我想让客户自己管理这个。我正在为“客户”生成一个表格,我想要的三列是:公司名称、公司描述和Logo。对于名称,我使用的是name:string但不确定如何在脚本/生成脚手架终端命令中最好地创建描述列(因为我打算将其设置为文本区域)和图片。我怀疑描述(我想成为一个文本区域)应该仍然是描述:字符串,然后以实际形式进行调整。不确定如何处理图片字段。那么……说来话长:我在脚手架命令中输入什么来生成描述和图片列? 最佳答案 对于“文本”数

  5. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  6. ruby-on-rails - Ruby - 如何从 ruby​​ 上的 .pfx 文件中提取公钥、rsa 私钥和 CA key - 2

    我有一个.pfx格式的证书,我需要使用ruby​​提取公共(public)、私有(private)和CA证书。使用shell我可以这样做:#ExtractPublicKey(askforpassword)opensslpkcs12-infile.pfx-outfile_public.pem-clcerts-nokeys#ExtractCertificateAuthorityKey(askforpassword)opensslpkcs12-infile.pfx-outfile_ca.pem-cacerts-nokeys#ExtractPrivateKey(askforpassword)o

  7. 带有 attr_accessor 的类上的 Ruby instance_eval - 2

    我了解instance_eval和class_eval之间的基本区别。我在玩弄时发现的是一些涉及attr_accessor的奇怪东西。这是一个例子:A=Class.newA.class_eval{attr_accessor:x}a=A.newa.x="x"a.x=>"x"#...expectedA.instance_eval{attr_accessor:y}A.y="y"=>NoMethodError:undefinedmethod`y='forA:Classa.y="y"=>"y"#WHATTT?这是怎么回事:instance_eval没有访问我们的A类(对象)然后它实际上将它添加到

  8. ruby-on-rails - rails 上的 ruby : radio buttons for collection select - 2

    我有一个集合选择:此方法的单选按钮是什么?谢谢 最佳答案 Rails3中没有这样的助手。在Rails4中,它是collection_radio_buttons. 关于ruby-on-rails-rails上的ruby:radiobuttonsforcollectionselect,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/18525986/

  9. ruby - 将命令行上的变量传递给 Cucumber 测试 - 2

    我正在尝试将cucumber项目的用户名和密码置于版本控制之外。有没有办法在命令行上手动将用户名和密码等变量传递给Cucumber脚本?我的备份计划是将它们放在一个YML文件中,然后将该文件添加到gitignore,这样它们就不会被置于版本控制中。 最佳答案 所以,我看到了您对铁皮人的评论,答案是肯定的。cucumberPASSWORD=my_passwordPASSWORD被设置为环境变量,您可以通过将其引用为ENV['PASSWORD']来使用它的值。例如,browser.text_field(:id=>'pwd').setEN

  10. ruby - 将哈希值保存到 Ruby 上的文件 - 2

    我刚刚迈出了编程的第一步。我刚刚完成了CodeAcademy的另一门类(class)。这次我被要求创建一个小电影目录。这是我的问题:如何在文件中保存/加载带有电影标题和评级的哈希值而不是自己的代码?下面是代码现在的样子(几句葡萄牙语,但您可以忽略它:movies={Memento:3,Primer:4,Ishtar:1}puts"Oquevocêgostariadefazer?"puts"--Digite'add'paraadicionarumfilme."puts"--Digite'update'paraatualizarumfilme."puts"--Digite'display'

随机推荐