我需要知道如何在不使用 XML 的情况下从外部文件夹加载未知数量的图像
请帮帮我,谢谢
因此,根据您的评论,我假设这是一个 AIR 应用程序,因此您可以通过File
类访问文件系统。
首先,您需要获取一个File
指向您的文件夹的对象,最简单的方法是对其进行硬编码。稍微复杂一点的方法是打开一个对话框,用户可以在其中选择他想要的文件夹(使用File.browseForOpen
)。
让我们采取简单的方法并定义文件夹的恒定路径,这里是用户文档文件夹中名为“images”的文件夹:
File imageFolder = File.documentsDirectory.resolvePath("images");
一旦我们有了一个文件夹实例,我们就可以使用该getDirectoryListing
方法列出该文件夹中的所有文件。这是一个例子:
// create a vector that will contain all our images
var images:Vector.<File> = new Vector.<File>();
// first, check if that folder really exists
if(imageFolder.exists && imageFolder.isDirectory){
var files:Array = imageFolder.getDirectoryListing();
for each(var file:File in files){
// match the filename against a pattern, here only files
// that end in jpg, jpeg, png or gif will be accepted
if(file.name.match(/\.(jpe?g|png|gif)$/i)){
images.push(file);
}
}
}
// at this point, the images vector will contain all image files
// that were found in the folder, or nothing if no images were found
// or the folder didn't exist.
要将文件加载到您的应用程序中,您可以执行以下操作:
for each(var file:File in images){
// use a FileStream to read the file data into a ByteArray
var stream:FileStream = new FileStream();
stream.open(file, FileMode.READ);
var bytes:ByteArray = new ByteArray();
stream.readBytes(bytes);
stream.close();
// create a loader and load the image into it
var loader:Loader = new Loader();
// use the loadBytes method to read the data
loader.loadBytes(bytes);
// you can add the loader to the scene, so that it will be visible.
// These loaders will all be at 0, 0 coordinates, so maybe change
// the x and y coordinates to something more meaningful/useful.
this.addChild(loader);
}
你能详细说明一下这个问题吗?如果是用户操作(即用户需要上传一些照片),我会使用File API - 你可以在此处查看示例- 否则,如果它来自服务器端,我会使用 PHP 或 Phyton 脚本。
假设您的应用程序是Air(桌面应用程序),此代码将很有用:
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
<mx:Script>
<![CDATA[
public function init():void{
var fs:FileStream = new FileStream();
var f:File = new File("c:/imgTest.jpg");
var b:ByteArray = new ByteArray();
fs.open(f, FileMode.READ);
fs.readBytes(b,0,fs.bytesAvailable);
idImg.source = b;
fs.close();
}
]]>
</mx:Script>
<mx:Image id="idImg" width="100%" height="100%"/>
</mx:WindowedApplication>
将图像放在c:/imgTest.jpg中。请注意,此图像位于您的项目路径之外。您有其他选项来加载图像,但这些必须可以通过 URL 访问,或者应该在项目的路径中。以下链接可用于在 Flex Air 和 Web 中加载图像:
注意:我只尝试使用JPG文件,我不知道这是否适用于其他类型。