c语言camera函数 c++调用相机

C语言中这段话是什么意思?

int (* Func) (T *list);

创新互联专注于桂东网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供桂东营销型网站建设,桂东网站制作、桂东网页设计、桂东网站官网定制、微信小程序开发服务,打造桂东网络公司原创品牌,更为您提供桂东网站排名全网营销落地服务。

是声明一个指向返回类型为int、参数列表为T *list(类型为T*,即指向类型T的指针)的函数指针Func。

typedef的语法和声明类似,只不过定义了一个类型,而不是声明变量。

所以

typedef int (* CameraLibraryAbilitiesFunc) (CameraAbilitiesList *list);

意思是定义一个指向——返回值为int类型、参数列表为CameraAbilitiesList *list的这类函数——的指针变量类型。

也就是说,这之后用CameraLibraryAbilitiesFunc f;就可以表示f指向这样一种函数了。用f=func(某个已经定义的这样类型的函数名),再用f(List)就相当于调用Func(List)了(也可以用(*f)(List),不过标准中似乎表示只是为了兼容性保留的特性,不推荐这样用)。函数指针可以重复赋值指向不同的函数(类型和参数列表要一致),这样可以带来一些方便。

整段程序应该是C++内嵌C代码,声明了一些照相机驱动用的函数类型(设备ID、错误信息之类)的名称。

----

[原创回答团]

摄像头 c

C语言本身是无法直接控制外设的。但可以通过各种应用编程接口(api),间接调用外部设备。例如opencv库。OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于(开源)发行的跨计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python, Java and MATLAB/OCTAVE (版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#,Ch, Ruby的支持。

例程:pre t="code" l="cpp"#include "cv.h"

#include "highgui.h"

int main(int argc, char** argv) {

cvNamedWindow("win");

CvCapture* capture = cvCreateCameraCapture(0); //创建并获取摄像设备

IplImage* frame;

while(1) {

frame = cvQueryFrame(capture); //创建并获取一张摄像截图

if(!frame) break; //如果失败终止循环

cvShowImage("win", frame); //在一个"win"窗口,并当中显示该截图

char c = cvWaitKey(50);

if(c==27) break;

}

cvReleaseCapture(capture); //释放摄像设备

cvDestroyWindow("win"); //释放窗口"win"

return 0;

}/ol

用c语言怎么实现android手机调用摄像头

android 中实现网页调用摄像头功能方法·如下:

1/apk/res/android"

xmlns:tools="schemas/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context=".CameraWebviewActivity"

Button

android:id="@+id/bt"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Camera"

android:layout_alignParentTop="true"

/

WebView

android:id="@+id/wv"

android:layout_width="fill_parent"

android:layout_height="match_parent"

android:layout_below="@+id/bt"

/

/RelativeLayout

4.、编写activity:

public class CameraWebviewActivity extends Activity {

private final static String TAG = "CameraWebviewActivity";

private Button bt;

private WebView wv;

public String fileFullName;//照相后的照片的全整路径

private boolean fromTakePhoto; //是否是从摄像界面返回的webview

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_camera_webview);

initViews();

}

private void initViews() {

bt = (Button) findViewById(R.id.bt);

bt.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

System.out.println("----------------");

takePhoto( Math.random()*1000+1 + ".jpg");

}

});

wv = (WebView) findViewById(R.id.wv);

WebSettings setting = wv.getSettings();

setting.setJavaScriptEnabled(true);

wv.setWebViewClient(new WebViewClient(){

@Override

public void onPageStarted(WebView view, String url, Bitmap favicon) {

super.onPageStarted(view, url, favicon);

}

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

return super.shouldOverrideUrlLoading(view, url);

}

@Override

public void onPageFinished(WebView view, String url) {

super.onPageFinished(view, url);

}

});

wv.setWebChromeClient(new WebChromeClient(){

@Override//实现js中的alert弹窗在Activity中显示

public boolean onJsAlert(WebView view, String url, String message, JsResult result) {

Log.d(TAG, message);

result.confirm();

return true;

}

});

wv.loadUrl("");

final Handler mHandler = new Handler();

//webview增加javascript接口,监听html页面中的js点击事件

wv.addJavascriptInterface(new Object(){

public String clickOnAndroid() {//将被js调用

mHandler.post(new Runnable() {

public void run() {

fromTakePhoto = true;

//调用 启用摄像头的自定义方法

takePhoto("testimg" + Math.random()*1000+1 + ".jpg");

System.out.println("========fileFullName: " + fileFullName);

}

});

return fileFullName;

}

}, "demo");

}

/*

* 调用摄像头的方法

*/

public void takePhoto(String filename) {

System.out.println("----start to take photo2 ----");

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

intent.putExtra(MediaStore.EXTRA_MEDIA_TITLE, "TakePhoto");

//判断是否有SD卡

String sdDir = null;

boolean isSDcardExist = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);

if(isSDcardExist) {

sdDir = Environment.getExternalStorageDirectory().getAbsolutePath();

} else {

sdDir = Environment.getRootDirectory().getAbsolutePath();

}

//确定相片保存路径

String targetDir = sdDir + "/" + "webview_camera";

File file = new File(targetDir);

if (!file.exists()) {

file.mkdirs();

}

fileFullName = targetDir + "/" + filename;

System.out.println("----taking photo fileFullName: " + fileFullName);

//初始化并调用摄像头

intent.putExtra(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");

intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(fileFullName)));

startActivityForResult(intent, 1);

}

/*

* (non-Javadoc)

* @see android.app.Activity#onActivityResult(int, int, android.content.Intent)

* 重写些方法,判断是否从摄像Activity返回的webview activity

*/

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

System.out.println("----requestCode: " + requestCode + "; resultCode " + resultCode + "; fileFullName: " + fileFullName);

if (fromTakePhoto requestCode ==1 resultCode ==-1) {

wv.loadUrl("javascript:wave2('" + fileFullName + "')");

} else {

wv.loadUrl("javascript:wave2('Please take your photo')");

}

fromTakePhoto = false;

super.onActivityResult(requestCode, resultCode, data);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.camera_webview, menu);

return true;

}

}


本文标题:c语言camera函数 c++调用相机
网址分享:http://azwzsj.com/article/dddpgdi.html