我创建了一个自定义组件,可以访问设备的相机来捕捉图片,将其设置为 ImageView
的源,然后将其保存到文件中 . 这是Javascript代码
CAMERA.JS
这是imageView的初始化
export function cameraLoaded(args):void{
cameraPage = <Page> args.object;
imageView = <Image> cameraPage.getViewById("img_upload");...
}
在这里,我将 imageViews
'源设置为刚刚拍摄的照片
export function takePicture():void{
camera.takePicture(
{
})
.then(
function(picture){
imageView.imageSource = picture;
},function(error){
});
}
这非常有效 .
现在我尝试将图片保存到文件中 .
export function saveToFile():void{
try {
let saved = imageView.imageSource.saveToFile(path,enums.ImageFormat.png);
HalooseLogger.log(saved,"upload");
})
}catch (e){
...
}
}
这里我得到一个错误 cannot read property saveToFile of undefined
这是非常不寻常的,事实上如果我 console.log(imageView)
这里是输出:
Image<img_upload>@file:///app/views/camera/camera.xml:4:5;
但如果我 console.log(imageView.imageSource
)我发现它是'未定义的' . How is this possible? What am I doing wrong?
ADDITIONAL INFO 上一个代码和relatedx xml包含在另一个视图中,如下所示:
MAIN.XML
<Page
xmlns="http://schemas.nativescript.org/tns.xsd"
xmlns:cameraPage="views/camera"
loaded="loaded">
<StackLayout orientation="vertical">
<StackLayout id="mainContainer">
<!-- DYNAMIC CONTENT GOES HERE -->
</StackLayout>
</StackLayout>
</Page>
MAIN.JS
这是相机视图动态加载的
export function loaded(args):void{
mainPage = <Page>args.object;
contentWrapper = mainPage.getViewById("mainContainer");
DynamicLoaderService.loadPage(mainPage,contentWrapper,mainViewModel.currentActive);
}
loadPage
方法执行以下操作:
public static loadPage(pageElement,parentElement,currentActive):void{
let component = Builder.load({
path : "views/camera",
name : "camera",
page : pageElement
});
parentElement.addChild(component);
}
1 回答
问题是,从NativeScript 2.4.0开始,为Android创建的 Image 将始终为其属性 imageSource 返回null . 目前,在处理多个大图像时,优化正在防止与内存不相关的问题,这就是为什么 image-asset 在nativeScript 2.4.0中呈现的原因 .
现在我不确定你是否正在使用最新的 nativescript-camera (强烈推荐),但如果是这样你应该考虑takePicture()的promise是返回imageAsset . 由于内存优化,imageSource将始终返回 undefined (对于Android),除非您专门创建一个 . 您可以使用fromAsset()方法来提供从相机回调返回的ImageAsset .
例: