Nativescript如何将图像保存到自定义组件中的文件

Nativescript如何将图像保存到自定义组件中的文件,nativescript,Nativescript,我已经创建了一个自定义组件,可以访问设备的摄像头来捕捉图片,将其设置为ImageView的源,然后将其保存到文件中。 下面是Javascript代码 CAMERA.JS 以下是imageView的初始化 export function cameraLoaded(args):void{ cameraPage = <Page> args.object; imageView = <Image> cameraPage.getViewById("img_upload

我已经创建了一个自定义组件,可以访问设备的摄像头来捕捉图片,将其设置为ImageView的源,然后将其保存到文件中。 下面是Javascript代码

CAMERA.JS

以下是imageView的初始化

export function cameraLoaded(args):void{
    cameraPage = <Page> args.object;
    imageView = <Image> cameraPage.getViewById("img_upload");...
}
这很好用

现在我尝试将图片保存到文件中

export function saveToFile():void{

    try {
        let saved = imageView.imageSource.saveToFile(path,enums.ImageFormat.png);
        HalooseLogger.log(saved,"upload");
        })
    }catch (e){
      ...
    }
}
这里我得到一个错误,无法读取未定义的属性saveToFile 这是非常不寻常的,事实上,如果I console.logimageView这里是输出:

Image<img_upload>@file:///app/views/camera/camera.xml:4:5;
MAIN.JS

这就是动态加载摄影机视图的情况

export function loaded(args):void{
    mainPage = <Page>args.object;
    contentWrapper = mainPage.getViewById("mainContainer");
 DynamicLoaderService.loadPage(mainPage,contentWrapper,mainViewModel.currentActive);
}

问题是,从NativeScript 2.4.0开始,为Android创建的图像的属性imageSource将始终返回null。目前,正在进行优化,以防止在处理多个大型图像时出现与内存不足相关的问题,这就是为什么图像资源出现在nativeScript 2.4.0中

现在我不确定你是否使用了最新的高度推荐,但是如果是的话,你应该考虑到SuffFIX的承诺是返回IMASSET。由于内存优化,对于Android,imageSource将始终返回undefined,除非您专门创建一个。您可以通过提供从摄影机回调返回的ImageAsset的fromAsset方法来实现这一点

例如:

import { EventData } from 'data/observable';
import { Page } from 'ui/page';

import { Image } from "ui/image";
import { ImageSource, fromAsset } from "image-source";
import { ImageAsset } from "image-asset";

import * as camera from "nativescript-camera";
import * as fs from "file-system";

var imageModule = require("ui/image");
var img;
var myImageSource: ImageSource;

// Event handler for Page "navigatingTo" event attached in main-page.xml
export function onLoaded(args: EventData) {
    // Get the event sender
    let page = <Page>args.object;

    img = <Image>page.getViewById("img");

    camera.requestPermissions();
}

export function takePhoto() {
    camera.takePicture()
        .then(imageAsset => {
            console.log("Result is an image asset instance");
            img.src = imageAsset;

            fromAsset(imageAsset).then(res => {
                myImageSource = res;
                console.log(myImageSource);
            })
        }).catch(function (err) {
            console.log("Error -> " + err.message);
        });
}

export function saveToFile(): void {



    var knownPath = fs.knownFolders.documents();
    var folderPath = fs.path.join(knownPath.path, "CosmosDataBank");

    var folder = fs.Folder.fromPath(folderPath);
    var path = fs.path.join(folderPath, "Test.png");

    var saved = myImageSource.saveToFile(path, "png");
    console.log(saved);
}

成功了!我在哪里可以了解这些新插件和操作方法?
export function loaded(args):void{
    mainPage = <Page>args.object;
    contentWrapper = mainPage.getViewById("mainContainer");
 DynamicLoaderService.loadPage(mainPage,contentWrapper,mainViewModel.currentActive);
}
 public static loadPage(pageElement,parentElement,currentActive):void{
        let component = Builder.load({
            path : "views/camera",
            name : "camera",
            page : pageElement
        });
        parentElement.addChild(component);
    } 
import { EventData } from 'data/observable';
import { Page } from 'ui/page';

import { Image } from "ui/image";
import { ImageSource, fromAsset } from "image-source";
import { ImageAsset } from "image-asset";

import * as camera from "nativescript-camera";
import * as fs from "file-system";

var imageModule = require("ui/image");
var img;
var myImageSource: ImageSource;

// Event handler for Page "navigatingTo" event attached in main-page.xml
export function onLoaded(args: EventData) {
    // Get the event sender
    let page = <Page>args.object;

    img = <Image>page.getViewById("img");

    camera.requestPermissions();
}

export function takePhoto() {
    camera.takePicture()
        .then(imageAsset => {
            console.log("Result is an image asset instance");
            img.src = imageAsset;

            fromAsset(imageAsset).then(res => {
                myImageSource = res;
                console.log(myImageSource);
            })
        }).catch(function (err) {
            console.log("Error -> " + err.message);
        });
}

export function saveToFile(): void {



    var knownPath = fs.knownFolders.documents();
    var folderPath = fs.path.join(knownPath.path, "CosmosDataBank");

    var folder = fs.Folder.fromPath(folderPath);
    var path = fs.path.join(folderPath, "Test.png");

    var saved = myImageSource.saveToFile(path, "png");
    console.log(saved);
}