BlackBerry 照相编程

来源:互联网 发布:淘宝的聚划算是什么 编辑:程序博客网 时间:2024/05/01 23:16

作者: 俞伟

 

 

BlackBerry SDK 5.0 以及前的版通过 MMAPI 现拍照能,要的功能包包括:

 

·    javax.microedition.media

·    javax.microedition.media.control

·    javax.microedition.amms.control.camera

 

拍照应包括下几部分

 

·    获取黑手机机支持信息,照大小格式,照片质量

·    显示并定照设置

·    打开相设备设置自动对焦,示摄头图像

·    拍照

 

获取持的照片规格

 

照片规通过 4 种属性来定义:片宽,照片高度,照格式和照片质量。为方便 定义照规格需要一个照片规如叫 EncodingProperties下:

 

 

/**

* 定义照规格通过getFullEncoding()拍照函VideoControl.getSnapshot()提供

* 照片定义

*/

public final class EncodingProperties

{

/** 照片格式  */

private String _format;

 

/** 照片宽  */

private String _width;

 

/** 照片高  */

private String _height;

 

/** 照片质量  */

private String _quality;

 

public void setFormat(String format)

{

_format = format;

}

 

public void setWidth(String width)

{

_width = width;

}

  

public void setHeight(String height)

{

_height = height;

}

 

public void setQuality(String quality)

{

_quality = quality;

}

 

/**

* VideoControl.getSnapshot(EncodingProperties.getFullEncoding())

*/

public String getFullEncoding()

{

StringBuffer fullEncoding = new StringBuffer();

 

fullEncoding.append("encoding=");

fullEncoding.append(_format);

 

fullEncoding.append("&width=");

fullEncoding.append(_width);

 

fullEncoding.append("&height=");

fullEncoding.append(_height);

 

fullEncoding.append("&quality=");

fullEncoding.append(_quality);

 

return fullEncoding.toString();

}

}

 

 

 

照片规类定完毕,下面要获照片格,代码如下:

 

private EncodingProperties[] getEncodingList(){

try

{

// 最终需的照片规

EncodingProperties[] encodings = null;

 

// 获取照规格

String encodingString = System.getProperty("video.snapshot.encodings");

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

// 初步解照片

String[] properties = StringUtilities.stringToKeywords(encodingString); Vector encodingList = new Vector();

String encoding = "encoding"; String width = "width";

String height = "height";

String quality = "quality";


 

 

EncodingProperties temp = null;

 

// 开始解析照片规格组装我们照片规格

for(int i = 0; i < properties.length ; ++i)

{

if( properties[i].equals(encoding))

{

if(temp != null && temp.isComplete())

{

// Add a new encoding to the list if it has been

// properly set.

encodingList.addElement( temp );

}

temp = new EncodingProperties();

 

// Set the new encoding's format

++i;

temp.setFormat(properties[i]);

}

else if( properties[i].equals(width))

{

// Set the new encoding's width

++i;

temp.setWidth(properties[i]);

}

else if( properties[i].equals(height))

{

// Set the new encoding's height

++i;

temp.setHeight(properties[i]);

}

else if( properties[i].equals(quality))

{

// Set the new encoding's quality

++i;

temp.setQuality(properties[i]);

}

}

 

// If there is a leftover complete encoding, add it.

if(temp != null && temp.isComplete())

{

encodingList.addElement( temp );

}

 

// Convert the Vector to an array for later use

encodings = new EncodingProperties[ encodingList.size() ];

encodingList.copyInto((Object[])encodings);

}

catch (Exception e)

{

// Something is wrong, indicate that there are no encoding options encodings = null;

}

// 返回需的照规格

return encodings;

}


 

 

 

显示确定照片设置

 

我们已有了 EncodingProperties以重写 toString()函数获照片 Radio Button

的格式示出,如下图所示:

 

 

 

这是 BlackBerry 9700 所支持的照规格。

 

 

 

启动像头准备拍照

 

首先要始化像头,然后启动像头设置自动对焦,把展摄像的 Field 添加到屏 幕上。

 

 

/**

* 初始化Player, VideoControl   VideoField

*/

private void initializeCamera()

{


try

{


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

// 注意里的参  “capture://videoPlayer

Player player = Manager.createPlayer( "capture://video" );

 

// 预备

player.realize();


 

 

// 获取  VideoControl

_videoControl = (VideoControl)player.getControl( "VideoControl" );

 

// 获取  FocusControl

_focusControl = (FocusControl)

player.getControl("javax.microedition.amms.control.camera.FocusControl");

 

if (_videoControl != null)

{

// 获取显示VideoUI组件:Field

_videoField = (Field) _videoControl.initDisplayMode

(VideoControl.USE_GUI_PRIMITIVE,

"net.rim.device.api.ui.Field");

_videoControl.setDisplayFullScreen(true);

_videoControl.setVisible(true);

}

 

if (_focusControl != null)

{

_focusControl.setFocus(FocusControl.AUTO);

}

 

// 启动摄

player.start();

 

// 添加到

add(_videoField);

 

}

catch(Exception e)

{

System.out.println("ERROR " + e.getClass() + ":       " + e.getMessage());

}

 

}

 

 

 

两个关的类别是 VideoControl FocusControlVideoControl UI 组件

示摄像捕捉 Video。这里定是在 Field 显示 Video示模式为全屏。

FocusControl 控制可以设自动焦或者自定对焦。

 

 

 

 


 

 

 

拍照

 

拍照要定照规格,在使用 VideoControl 代码如:

 

 

/**

* 按指定照片格拍照

*/

public Bitmap takePicture(){

try{

Bitmap image = null;

String encoding = null;

 

if( _encodings != null )

{

// 指定片规格

encoding = _encodings[_indexOfEncoding].getFullEncoding();

}

 

// 指定照,使VideoControl拍照

// 照片规  encoding=jpeg&width=1024&height=768&quality=normal

byte[] raw = _videoControl.getSnapshot( encoding );

 

// 组装成

image = Bitmap.createBitmapFromBytes( raw, 0, -1, 1 );

}

catch(Exception e)

{

PingAn.errorDialog("ERROR " + e.getClass() + ":       " + e.getMessage());

}

 

return image;

}

 

 

 

这段代指定片规格并使用 VideoControl 照片规范例:

 

String encoding = “encoding=jpeg&width=1024&height=768&quality=normal;

 

使用照规格照:

 

byte[] raw = _videoControl.getSnapshot(encoding);

 

获取的片二制数据流可以被装成片。

 

 

 

  

 

 

BlackBerry SDK下载

 

  • BlackBerry Java Plug-in for Eclipse v1.1
  • Java Plug-in for Eclipse Update Site
  • BlackBerry Web Plug-in v2.0
  • BlackBerry Widget SDK v1.0
  • BlackBerry Theme Studio v5.0
  • Plazmic Content Developer’s Kit v4.7
  • BlackBerry smartphone simulators