【问题标题】:Saving and masking webcam still AS3 AIR IOS保存和屏蔽网络摄像头仍然是 AS3 AIR IOS
【发布时间】:2013-12-16 22:29:32
【问题描述】:

我的目标是创建一个应用程序,用户可以在其中拍摄他们的脸部照片,其中包括面部切口的叠加。我需要用户能够单击屏幕并让应用程序保存图片,用相同的面部切口对其进行遮罩,然后将其保存到应用程序存储中。

这是第一次在带有 Actionscript3 的 IOS 上使用 AIR。我知道您应该在 IOS 上保存一个正确的目录,但我不知道。我一直在使用 SharedObjects 保存其他变量...

例如:

var so:SharedObject = SharedObject.getLocal("applicationID");

然后写给它

so.data['variableID'] = aVariable;

这就是我访问前置摄像头并显示它的方式。出于某种原因,为了显示整个视频而不是其中的一小部分,我将摄像机中的视频添加到舞台上的动画剪辑中,占舞台大小的 50%。

import flash.media.Camera;
import flash.media.Video;
import flash.display.BitmapData;
import flash.utils.ByteArray;
import com.adobe.images.JPGEncoder


var camera:Camera = Camera.getCamera("1");
camera.setQuality(0,100);
camera.setMode(1024,768, 30, false);

var video:Video = new Video();
video.attachCamera(camera);


videoArea.addChild(video);


Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
Capture_Picture_BTN.addEventListener(TouchEvent.TOUCH_TAP, savePicture);
function savePicture(event:TouchEvent):void
{
trace("Saving Picture");
//Capture Picture BTN
var bitmapData:BitmapData = new BitmapData(1024,768);
bitmapData.draw(video);

}

如果这是错误的处理方式,我深表歉意。我对 Actionscript 还是很陌生。如果您需要更多信息,我将很乐意提供。

【问题讨论】:

    标签: ios actionscript-3 flash air


    【解决方案1】:

    您只能通过SharedObject 保存约 100kb 的数据,因此您不能使用它。它仅用于保存应用程序设置,根据我的经验,AIR 开发人员会忽略它,因为我们可以更好地控制文件系统。

    我们有 File 和 FileStream 类。这些类允许您直接从设备磁盘读取和写入,这在网络上不太可能(用户是必须保存/打开的人;不能自动完成)。

    在我的示例之前,我必须强调您应该阅读文档。 Adobe 的 LiveDocs 是可用的最好的语言/SDK 文档之一,它会指出我的快速使用示例不会指出的许多事情(例如深入讨论每个目录、如何编写各种类型等)

    所以,这里有一个例子:

    // create the File and resolve it to the applicationStorageDirectory, which is where you should save files
    var f:File = File.applicationStorageDirectory.resolvePath("name.png"); 
    // this prevents iCloud backup. false by default. Apple will reject anything using this directory for large file saving that doesn't prevent iCloud backup. Can also use cacheDirectory, though certain aspects of AIR cannot access that directory
    f.preventBackup = true; 
    
    // set up the filestream
    var fs:FileStream = new FileStream();
    fs.open(f, FileMode.WRITE); //open file to write
    fs.writeBytes( BYTE ARRAY HERE ); // writes a byte array to file
    fs.close(); // close connection
    

    这样就可以保存到磁盘了。要阅读,请在 READ 模式下打开 FileStream。

    var fs:FileStream = new FileStream();
    var output:ByteArray = new ByteArray();
    fs.open(f, FileMode.READ); //open file to write
    fs.readBytes( output ); // reads the file into a byte array
    fs.close(); // close connection
    

    再次,请阅读文档。 FileStream 支持几十种不同类型的读写方式。您需要根据您的情况选择正确的方法(readBytes() 和 writeBytes() 应该适用于所有情况,但在某些情况下您应该使用更具体的方法)

    希望对您有所帮助。

    【讨论】:

    • 谢谢乔希,这对我很有帮助,我一定会查看文档,它们听起来很有帮助。再次,我会看一下文档,但是,您是否知道无论如何要根据 alpha 级别屏蔽字节数组/图像?
    • 你能张贴一张你想要的图片吗?我不太确定你在问什么。可以屏蔽,当然。并且有一个 alpha 掩码类型。但我需要确切地知道您在寻找什么。
    猜你喜欢
    • 2013-03-22
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多