使用 FirefoxOS 相机拍照 API
Taking picture using FirefoxOS Camera API
我在 FirefoxOS 中使用相机 API 时遇到一些问题。我正在尝试拍摄这样的照片:
var options = {
mode: 'picture',
recorderProfile: 'jpg',
previewSize: {
width: 352,
height: 288
}
};
function successCamera(newCamera) {
console.log("Succeeded loading camera");
function successPicture(pictureBlob){
console.log("Took picture");
}
function errorPicture(error) { console.log("Issue taking picture " + error); }
var picture = newCamera.takePicture(options, successPicture, errorPicture);
}
function errorCamera(error) {
console.log("Error loading camera. " + error);
console.warn(error);
}
navigator.mozCameras.getCamera("back", options, successCamera, errorCamera);
它给出了一个名为:HardwareClosed 的错误。
我找不到太多关于这个错误的信息,所以我只想在这里查看 Whosebug,看看是否有人遇到过问题/知道这里的问题是什么。
感谢您的帮助!
如果不必是直接从相机拍摄的照片,您可以使用 Pick Activity:
var pick = new MozActivity({
name: "pick",
data: {type: ["image/*"]}
});
pick.onsuccess = function () {
console.log('import pick success', this.result.type, this.result.blob );
app.importImageFile(this.result.blob);
};
pick.onerror = function () {
var userMsg;
console.error('import pick error', this.error);
switch (this.error.name) {
case 'ActivityCanceled':
return;
case 'NO_PROVIDER':
userMsg = $L('No external sources for images.');
break;
default:
userMsg = this.error.message || this.error.name || this.error.toString();
}
enyo.Signals.send('onShowMessage', {message: userMsg });
};
HardwareClosed(映射到 NS_ERROR_NOT_INITIALIZED 内部)可以由 getCamera 和 takePicture 调用返回。
如果是getCamera调用失败,可能是因为相机已经打开(在本应用中,或在其他应用中),需要先释放。在 Firefox OS 的未来版本中,https://bugzilla.mozilla.org/show_bug.cgi?id=1073017 将修复此问题,以便新应用程序可以 "take" 旧的相机。
如果是takePicture调用失败(可能不是你的情况),那是因为在你调用takePicture之前相机已经被释放了。那是你叫release或者某些驱动程序错误迫使相机关闭。
其他一些(不相关的)建议:
请注意,recorderProfile 无效。这样的东西会更合适:
var options = {
mode: 'picture',
recorderProfile: 'high',
previewSize: {
width: 352,
height: 288
}
};
更高版本的 Firefox OS(最新的 2.2,master)验证 recorderProfile 并且如果您提供 'jpg' 将拒绝配置。
在更高版本的相机中删除了回调语法 API,并切换为 promises 和 events。如果您能够将您的 2.2 版本升级到最新版本(今年的版本),它会自动 select 为您提供最佳配置,即:
navigator.mozCameras.getCamera("back").then(successCamera, errorCamera);
会 select 最接近您的 window 尺寸的匹配预览尺寸,以及与所选可用预览尺寸相匹配的最高宽高比图片尺寸。这与股票相机应用程序的工作方式相同。
takePicture 和 getCamera 使用不同的选项(有些重叠),但由于您没有将它们中的任何一个用于 takePicture,null 应该足够了:
var picture = newCamera.takePicture().then(successPicture, errorPicture);
或
var picture = newCamera.takePicture(null, successPicture, errorPicture);
如果你想同时支持 promise 和 callback API 版本,你可以像这个应用程序那样做一个技巧来检查 Firefox OS 版本:https://github.com/texthtml/torch/blob/master/src/index.js#L69
我在 FirefoxOS 中使用相机 API 时遇到一些问题。我正在尝试拍摄这样的照片:
var options = {
mode: 'picture',
recorderProfile: 'jpg',
previewSize: {
width: 352,
height: 288
}
};
function successCamera(newCamera) {
console.log("Succeeded loading camera");
function successPicture(pictureBlob){
console.log("Took picture");
}
function errorPicture(error) { console.log("Issue taking picture " + error); }
var picture = newCamera.takePicture(options, successPicture, errorPicture);
}
function errorCamera(error) {
console.log("Error loading camera. " + error);
console.warn(error);
}
navigator.mozCameras.getCamera("back", options, successCamera, errorCamera);
它给出了一个名为:HardwareClosed 的错误。 我找不到太多关于这个错误的信息,所以我只想在这里查看 Whosebug,看看是否有人遇到过问题/知道这里的问题是什么。
感谢您的帮助!
如果不必是直接从相机拍摄的照片,您可以使用 Pick Activity:
var pick = new MozActivity({
name: "pick",
data: {type: ["image/*"]}
});
pick.onsuccess = function () {
console.log('import pick success', this.result.type, this.result.blob );
app.importImageFile(this.result.blob);
};
pick.onerror = function () {
var userMsg;
console.error('import pick error', this.error);
switch (this.error.name) {
case 'ActivityCanceled':
return;
case 'NO_PROVIDER':
userMsg = $L('No external sources for images.');
break;
default:
userMsg = this.error.message || this.error.name || this.error.toString();
}
enyo.Signals.send('onShowMessage', {message: userMsg });
};
HardwareClosed(映射到 NS_ERROR_NOT_INITIALIZED 内部)可以由 getCamera 和 takePicture 调用返回。
如果是getCamera调用失败,可能是因为相机已经打开(在本应用中,或在其他应用中),需要先释放。在 Firefox OS 的未来版本中,https://bugzilla.mozilla.org/show_bug.cgi?id=1073017 将修复此问题,以便新应用程序可以 "take" 旧的相机。
如果是takePicture调用失败(可能不是你的情况),那是因为在你调用takePicture之前相机已经被释放了。那是你叫release或者某些驱动程序错误迫使相机关闭。
其他一些(不相关的)建议:
请注意,recorderProfile 无效。这样的东西会更合适:
var options = {
mode: 'picture',
recorderProfile: 'high',
previewSize: {
width: 352,
height: 288
}
};
更高版本的 Firefox OS(最新的 2.2,master)验证 recorderProfile 并且如果您提供 'jpg' 将拒绝配置。
在更高版本的相机中删除了回调语法 API,并切换为 promises 和 events。如果您能够将您的 2.2 版本升级到最新版本(今年的版本),它会自动 select 为您提供最佳配置,即:
navigator.mozCameras.getCamera("back").then(successCamera, errorCamera);
会 select 最接近您的 window 尺寸的匹配预览尺寸,以及与所选可用预览尺寸相匹配的最高宽高比图片尺寸。这与股票相机应用程序的工作方式相同。
takePicture 和 getCamera 使用不同的选项(有些重叠),但由于您没有将它们中的任何一个用于 takePicture,null 应该足够了:
var picture = newCamera.takePicture().then(successPicture, errorPicture);
或
var picture = newCamera.takePicture(null, successPicture, errorPicture);
如果你想同时支持 promise 和 callback API 版本,你可以像这个应用程序那样做一个技巧来检查 Firefox OS 版本:https://github.com/texthtml/torch/blob/master/src/index.js#L69