java攝像機(jī)移動(dòng)代碼 Java調(diào)用攝像頭

unity用java腳本怎么實(shí)現(xiàn)在安卓下手指滑動(dòng)旋轉(zhuǎn)主攝像機(jī)

1. unity3d介紹

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供新平企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、H5高端網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為新平眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。

這是一個(gè)跨平臺(tái)的3維游戲開發(fā)引擎,封裝程度非常高,使用者完全不用管平臺(tái)的問題

比如我開發(fā)android的應(yīng)用,只需要導(dǎo)入模型,寫模型要怎樣旋轉(zhuǎn)即可,至于android、dalvik虛擬機(jī)、java,完全用不到。

2. 下載

(1)在官方網(wǎng)站下載名字叫UnitySetup-3.5.3.exe的程序即可

(2)要開發(fā)android的,需要下載android的SDK,巨大,具體步驟網(wǎng)上搜索,我的博客好像也有

3. 使用

(1)安裝unity,直接打開unity,打開后會(huì)默認(rèn)打開自帶的例子,選擇文件-新建scene

(2)在里面畫模型或?qū)胪獠磕P?,格式為FBX,其他格式?jīng)]試過

菜單欄的assets表示資源的意思,創(chuàng)建模型要在gameobject里面,創(chuàng)建cube等。

創(chuàng)建完成后,打開hierarchy面版,選中對(duì)象,可以在inspector中查看屬性,可以調(diào)整攝像機(jī)的位置,模型的位置

(3)先寫腳本,然后為相機(jī)或模型綁定腳本

在project面板中新建一個(gè)文件夾,用于存放與這個(gè)項(xiàng)目有關(guān)的圖片、腳本等。

然后在里面創(chuàng)建一個(gè)javascript腳本,用記事本或自帶的assemble-打開,復(fù)制粘貼下面的東西

#pragma strict

//用于綁定參照物對(duì)象

var target : Transform;

//縮放系數(shù)

var distance = 10.0;

//左右滑動(dòng)移動(dòng)速度

var xSpeed = 250.0;

var ySpeed = 120.0;

//縮放限制系數(shù)

var yMinLimit = -20;

var yMaxLimit = 80;

//攝像頭的位置

var x = 0.0;

var y = 0.0;

//記錄上一次手機(jī)觸摸位置判斷用戶是在左放大還是縮小手勢(shì)

private var oldPosition1 : Vector2;

private var oldPosition2 : Vector2;

//初始化游戲信息設(shè)置

function Start () {

var angles = transform.eulerAngles;

x = angles.y;

y = angles.x;

// Make the rigid body not change rotation

if (rigidbody)

rigidbody.freezeRotation = true;

}

function Update ()

{

//判斷觸摸數(shù)量為單點(diǎn)觸摸

if(Input.touchCount == 1)

{

//觸摸類型為移動(dòng)觸摸

if(Input.GetTouch(0).phase==TouchPhase.Moved)

{

//根據(jù)觸摸點(diǎn)計(jì)算X與Y位置

x += Input.GetAxis("Mouse X") * xSpeed * 0.02;

y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;

}

}

//判斷觸摸數(shù)量為多點(diǎn)觸摸

if(Input.touchCount 1 )

{

//前兩只手指觸摸類型都為移動(dòng)觸摸

if(Input.GetTouch(0).phase==TouchPhase.Moved||Input.GetTouch(1).phase==TouchPhase.Moved)

{

//計(jì)算出當(dāng)前兩點(diǎn)觸摸點(diǎn)的位置

var tempPosition1 = Input.GetTouch(0).position;

var tempPosition2 = Input.GetTouch(1).position;

//函數(shù)返回真為放大,返回假為縮小

if(isEnlarge(oldPosition1,oldPosition2,tempPosition1,tempPosition2))

{

//放大系數(shù)超過3以后不允許繼續(xù)放大

//這里的數(shù)據(jù)是根據(jù)我項(xiàng)目中的模型而調(diào)節(jié)的,大家可以自己任意修改

if(distance 3)

{

distance -= 0.5;

}

}else

{

//縮小洗漱返回18.5后不允許繼續(xù)縮小

//這里的數(shù)據(jù)是根據(jù)我項(xiàng)目中的模型而調(diào)節(jié)的,大家可以自己任意修改

if(distance 18.5)

{

distance += 0.5;

}

}

//備份上一次觸摸點(diǎn)的位置,用于對(duì)比

oldPosition1=tempPosition1;

oldPosition2=tempPosition2;

}

}

}

//函數(shù)返回真為放大,返回假為縮小

function isEnlarge(oP1 : Vector2,oP2 : Vector2,nP1 : Vector2,nP2 : Vector2) : boolean

{

//函數(shù)傳入上一次觸摸兩點(diǎn)的位置與本次觸摸兩點(diǎn)的位置計(jì)算出用戶的手勢(shì)

var leng1 =Mathf.Sqrt((oP1.x-oP2.x)*(oP1.x-oP2.x)+(oP1.y-oP2.y)*(oP1.y-oP2.y));

var leng2 =Mathf.Sqrt((nP1.x-nP2.x)*(nP1.x-nP2.x)+(nP1.y-nP2.y)*(nP1.y-nP2.y));

if(leng1leng2)

{

//放大手勢(shì)

return true;

}else

{

//縮小手勢(shì)

return false;

}

}

//Update方法一旦調(diào)用結(jié)束以后進(jìn)入這里算出重置攝像機(jī)的位置

function LateUpdate () {

//target為我們綁定的箱子變量,縮放旋轉(zhuǎn)的參照物

if (target) {

//重置攝像機(jī)的位置

y = ClampAngle(y, yMinLimit, yMaxLimit);

var rotation = Quaternion.Euler(y, x, 0);

var position = rotation * Vector3(0.0, 0.0, -distance) + target.position;

transform.rotation = rotation;

transform.position = position;

}

}

static function ClampAngle (angle : float, min : float, max : float) {

if (angle -360)

angle += 360;

if (angle 360)

angle -= 360;

return Mathf.Clamp (angle, min, max);

}

function OnGUI () {

//將坐標(biāo)信息顯示在3D屏幕中

GUI.Label(Rect(50, 100,200,20),"x pos is" + x);

GUI.Label(Rect(50, 120,200,20),"y pos is" + y );

}

這段代碼表示target要怎么渲染,即在每一幀的渲染時(shí)進(jìn)行旋轉(zhuǎn)、縮放等,還有與屏幕的交互。

拷貝完了,記得在assembly-unityscript中按F8編譯。

然后在project面板,吧這個(gè)腳本文件拖到hierarchy面板的camera上,就完成了腳本與camera對(duì)象的綁定

然后再hierarchy面板選中camera,把cube拖到camera在inspector面板底部的腳本對(duì)應(yīng)的target中,意思就是把cube賦值給腳本中的target。

(4)導(dǎo)出apk文件

file-build setting,android的話要制定sdk的位置。

編,程,回,憶,錄,之unity3d大致過程就是tmd這樣的。

java 怎么調(diào)用攝像頭

正好我最近在弄JAVA攝像頭東西

JAVA加載攝像頭需要用JMF框架,這個(gè)LZ可以去SUN的主頁下到,具體的配置搜下就有了

我這個(gè)是在用JFrame的

加載的代碼是這樣的:

public JPanel contentPane = new JPanel();

public void getvideo(){

CaptureDeviceInfo di = null;

MediaLocator ml = null;

Player player = null;

Vector deviceList = CaptureDeviceManager.getDeviceList(null);

if(deviceList!=null)

{

for(int i=0;ideviceList.size();i++)

{

di=(CaptureDeviceInfo)deviceList.elementAt(i);

if(di.getName().startsWith("vfw:")){

ml=di.getLocator();

}

}

}

else{

System.err.print("No Capture Device");

System.exit(-1);

}

try {

player = Manager.createRealizedPlayer(ml);

player.start();

Component comp;

if((comp = player.getVisualComponent())!=null)

{ comp.setBounds(new Rectangle(0, 40,320, 240));

contentPane.add(comp,BorderLayout.NORTH);

}

} catch (NoPlayerException e) {

e.printStackTrace();

} catch (CannotRealizeException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

再把contentPane添加到JFrame里面,這個(gè)就可以在一個(gè)JFrame的框架用攝像頭了

還有,要注意個(gè)事,就是第一次使用攝像頭的話,要用JMF帶的程序JMF Registry選到capture Devices中注冊(cè)下,不然是找不到驅(qū)動(dòng)的

電腦上有多個(gè)攝像頭時(shí)。怎樣編寫一個(gè)java程序調(diào)用我指定的那個(gè)攝像頭?

先下載jfm安裝好,里面可以里面可以看到你有哪些攝像頭驅(qū)動(dòng)的,還可以對(duì)每個(gè)攝像頭進(jìn)行設(shè)置

你要用java進(jìn)行攝像頭開發(fā)必須先下載安裝jmf.

比如:

captureDeviceInfo = CaptureDeviceManager.getDevice("vfw:Microsoft WDM Image Capture (Win32):0"); // 加載驅(qū)動(dòng)

這個(gè)加載的驅(qū)動(dòng)名稱就是和jfm中的驅(qū)動(dòng)對(duì)應(yīng)的,如果你有其他攝像頭在jmf中可以看到驅(qū)動(dòng)的,直接加載那個(gè)驅(qū)動(dòng)就可以了

java語言里怎么讓圖象移動(dòng)到指定位置啊,最好用一小段代碼說明.

改變規(guī)制時(shí)候的X Y就行了.偽代碼如下.

int x =0,y=0,;

x++; y++;

g.drawImage( "圖片信息" , x, y,錨點(diǎn));

大概就這樣圖片就動(dòng)了.你想移動(dòng)到哪加個(gè)判斷就行了.

JAVA代碼如何調(diào)用客戶端攝像頭

首先到sun下載最新的jmf,然后安裝。

然后,說一下需求

1. 用攝像頭拍照

2. 在文本框輸入文件名

3. 按下拍照按鈕,獲取攝像頭內(nèi)的圖像

4. 在拍下的照片上有一紅框截取固定大小的照片。

5. 保存為本地圖像為jpg格式,不得壓縮畫質(zhì)

技術(shù)關(guān)鍵,相信也是大家最感興趣的部分也就是如何讓一個(gè)攝像頭工作,并拍下一張照片了。

利用jmf,代碼很簡(jiǎn)單:

//利用這三個(gè)類分別獲取攝像頭驅(qū)動(dòng),和獲取攝像頭內(nèi)的圖像流,獲取到的圖像流是一個(gè)swing的component組件類

public static player player = null;

private capturedeviceinfo di = null;

private medialocator ml = null;

//文檔中提供的驅(qū)動(dòng)寫法,為何這么寫我也不知:)

string str1 = "vfw:logitech usb video camera:0 ";

string str2 = "vfw:microsoft wdm image capture (win32):0 ";

di = capturedevicemanager.getdevice(str2);

ml = di.getlocator();

try

{

player = manager.createrealizedplayer(ml);

player.start();

component comp;

if ((comp = player.getvisualcomponent()) != null)

{

add(comp, borderlayout.north);

}

}

catch (exception e)

{

e.printstacktrace();

}

接下來就是點(diǎn)擊拍照,獲取攝像頭內(nèi)的當(dāng)前圖像。

代碼也是很簡(jiǎn)單:

private jbutton capture;

private buffer buf = null;

private buffertoimage btoi = null;

private imagepanel imgpanel = null;

private image img = null;

private imagepanel imgpanel = null;

jcomponent c = (jcomponent) e.getsource();

if (c == capture)//如果按下的是拍照按鈕

{

framegrabbingcontrol fgc =(framegrabbingcontrol) player.getcontrol( "javax.media.control.framegrabbingcontrol ");

buf = fgc.grabframe(); // 獲取當(dāng)前禎并存入buffer類

btoi = new buffertoimage((videoformat) buf.getformat());

img = btoi.createimage(buf); // show the image

imgpanel.setimage(img);

}

保存圖像的就不多說了,以下為示例代碼

bufferedimage bi = (bufferedimage) createimage(imgwidth, imgheight);

graphics2d g2 = bi.creategraphics();

g2.drawimage(img, null, null);

fileoutputstream out = null;

try

{

out = new fileoutputstream(s);

}

catch (java.io.filenotfoundexception io)

{

system.out.println( "file not found ");

}

jpegimageencoder encoder = jpegcodec.createjpegencoder(out);

jpegencodeparam param = encoder.getdefaultjpegencodeparam(bi);

param.setquality(1f, false);//不壓縮圖像

encoder.setjpegencodeparam(param);

try

{

encoder.encode(bi);

out.close();

}

catch (java.io.ioexception io)

{

system.out.println( "ioexception ");

}

把.jar文件導(dǎo)入。下載了jmf后需要安裝,安裝后你的那個(gè)jmf目錄下就會(huì)有一個(gè)lib文件夾里面有.jar文件,然后打開eclipse,右鍵選擇你的工程-〉屬性-〉java build path- library-〉add external jars 找到你的jmf目錄下lib的那個(gè)文件夾然后選中那些文件導(dǎo)入就ok了。

然后利用工具提供的導(dǎo)入文件幫助,一個(gè)一個(gè)導(dǎo)就OK了

java遠(yuǎn)程訪問攝像頭怎么實(shí)現(xiàn)

OpenOffice java api:

簡(jiǎn)單的說就是利用java程序可以操作OpenOffice的所有功能,比如創(chuàng)建doc文檔,插入文字,設(shè)置文字格式等等。

1. OpenOffice 給程序員提供了一個(gè)叫UNO (UniversalNetwork Objects)的組件技術(shù).我理解的UNO: OpenOffice 類似于web程序中的服務(wù)器,程序員寫的代碼類似于客戶端,利用UNO提供的接口和服務(wù)去完成對(duì)OpenOffice文檔的操作。所以寫程序首先要搭建 UNO環(huán)境:

1. 下載 OpenOffice

2.復(fù)制UNO提供的jar包: unoil.jar, java_uno.jar, juh.jar, jurt.jar, ridl.jar, unoloader.jar. (ps: 安裝了SDK之后在文件夾找)到自己的工程中,引入它們。

3. 下載文檔:DevelopersGuide.pdf.

4. 安裝了SDK后,重新啟動(dòng)一下機(jī)器,然后就可以按照 DevelopersGuide 來學(xué)習(xí) UNO 編程了。

5. 需要ava 環(huán)境。

補(bǔ)充: 安裝了SDK后, java, c++幫助文檔,樣例程序,其他關(guān)于sdk的信息 都放在本地openOffice安裝路徑一個(gè)叫sdk目錄下面,enjoy it !

總結(jié)一下已經(jīng)實(shí)現(xiàn)的功能和碰到的問題匯總:

1. 首先要得到遠(yuǎn)程office組件的上下文.通過:

com.sun.star.uno.XComponentContext xContext = com.sun.star.comp.helper.Bootstrap.bootstrap();

得到,如果OpenOffice安裝路徑不是在工程的路徑下面(我自己猜的), 就會(huì)報(bào):

com.sun.star.comp.helper.BootstrapException: no office executable found!

解決辦法: 黑其源代碼, 看了源代碼就會(huì)發(fā)現(xiàn)其實(shí)OpenOffice是在尋找本地的soffice的shell文件,所以弄個(gè)變量來保存soffice在系統(tǒng)中的路徑,重新寫一 個(gè)Bootstrap就可以了。詳細(xì)請(qǐng)參照:論壇 。

2. 得到 XMultiComponentFactory (ComponentFactory 工廠)

com.sun.star.lang.XMultiComponentFactory xMCF = xContext.getServiceManager();

3. 得到各種組件可以通過下面代碼:

// docType 是 與 soffice 同目錄下面的OpenOffice的其他shell文件,swrite等等

protected XComponent newDocComponent(String docType)

throws java.lang.Exception {

String loadUrl = "private:factory/" + docType;

mxRemoteServiceManager = this.getRemoteServiceManager();

Object desktop = mxRemoteServiceManager.createInstanceWithContext(

"com.sun.star.frame.Desktop", mxRemoteContext);

XComponentLoader xComponentLoader = (XComponentLoader) UnoRuntime

.queryInterface(XComponentLoader.class, desktop);

PropertyValue[] loadProps = new PropertyValue[0];

return xComponentLoader.loadComponentFromURL(loadUrl, "_blank", 0,

loadProps);

}

4.得到 XTextDocument

XComponent xEmptyWriterComponent = newDocComponent("swriter");

XTextDocument mxDoc = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class,

xEmptyWriterComponent);

5. 得到一個(gè)文檔的引用

XText mxDocText = mxDoc.getText();

6. 得到文檔的屬性列表

XPropertySet mxDocProps = (XPropertySet) UnoRuntime.queryInterface(

XPropertySet.class, mxDoc);

7. 建立光標(biāo),用來插入新的內(nèi)容。

XTextCursor mxDocCursor = mxDocText.createTextCursor();

XSentenceCursor xSentenceCursor = (XSentenceCursor) UnoRuntime

.queryInterface(XSentenceCursor.class, mxDocCursor);

XWordCursor xWordCursor = (XWordCursor) UnoRuntime.queryInterface(

XWordCursor.class, mxDocCursor);

8.得到光標(biāo)屬性列表

XPropertySet xCursorProps = (XPropertySet) UnoRuntime .queryInterface(XPropertySet.class, mxDocCursor);

9.設(shè)置插入文字格式

xCursorProps.setPropertyValue("CharFontName", "宋體");

xCursorProps.setPropertyValue("CharWeight", new Float(FontWeight.BOLD));

xCursorProps.setPropertyValue("CharHeight", new Float(10.5));

// 居中顯示

xCursorProps.setPropertyValue("ParaAdjust", com.sun.star.style.ParagraphAdjust.CENTER);

10.在該光標(biāo)處插入信息

mxDocText.insertString(xSentenceCursor, “Hello World", true);

11. 保存的關(guān)鍵代碼

protected void storeDocComponent(XComponent xDoc, String storeUrl)

throws java.lang.Exception {

XStorable xStorable = (XStorable) UnoRuntime.queryInterface(

XStorable.class, xDoc);

PropertyValue[] storeProps = new PropertyValue[1];

storeProps[0] = new PropertyValue();

storeProps[0].Name = "FilterName";

storeProps[0].Value = "MS Word 97";

openOfficeJavaLogger.debug("... store \"" + xDoc.toString() + "\" to \"" + storeUrl

+ "\".");

xStorable.storeAsURL(storeUrl, storeProps);

}

名稱欄目:java攝像機(jī)移動(dòng)代碼 Java調(diào)用攝像頭
鏈接地址:http://muchs.cn/article8/hhspip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、小程序開發(fā)、服務(wù)器托管動(dòng)態(tài)網(wǎng)站、定制網(wǎng)站網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司