【发布时间】:2011-09-23 05:17:22
【问题描述】:
我一直在使用 adobe air、html 和 javascript 开发一个简单的桌面应用程序来将数据保存到 sqlite(不是 as,没有 flash builder,没有 flex)。有没有办法可以从我的网络摄像头捕获图像并使用这些技术保存它?如果没有,还能做些什么来达到这个结果?提前致谢。
【问题讨论】:
我一直在使用 adobe air、html 和 javascript 开发一个简单的桌面应用程序来将数据保存到 sqlite(不是 as,没有 flash builder,没有 flex)。有没有办法可以从我的网络摄像头捕获图像并使用这些技术保存它?如果没有,还能做些什么来达到这个结果?提前致谢。
【问题讨论】:
这可以做到,但绝对不利于性能:) 你会得到巨大的字符串对象(更大的图像 = 更大的字符串)。但我会告诉你我是怎么做到的。
首先,您必须从网络摄像头获取 BitmapData。这可以通过创建一个 BitmapData 对象并使用它的 draw() 函数来完成,如下所示:
var bmpd:BitmapData = new BitmapData(webcam.width, webcam.height);
bmpd.draw(webcam);
有了这个 BitmapData,你就可以调用 getPixels(),它会返回一个 ByteArray。
var ba:ByteArray = bmpd.getPixels();
这个 ByteArray 现在可以进行序列化了。由于您正在存储,因此最好将其存储为字符串。这通常由 Base64 完成。可以使用this class实现base64编码,如下图:
var baseString:String = Base64.encodeByteArray(ba);
上述字符串可以存储在您的 sqlite 中,并且是您图像的字符串表示形式。图片越大,转换时间越长。
要从你的 sqlite 取回图像,你可以使用我给你的 Base64 类的 decodeByteArray() 方法,结合加载器对象。示例如下所示。
var baseString = StringFromYourSQLite;
var ba:ByteArray = Base64.decodeToByteArray(baseString);
var imageLoader:Loader = new Loader();
imageLoader.loadBytes(ba);
stage.addChild(imageLoader);
这就是您可以从数据库中存储和检索图像的方式。
【讨论】: