使用 Adob​​e AIR 在 iOS 上保存位图

Saving bitmap on iOS using Adobe AIR

我终于尝试将我的 Flash 游戏移植到应用程序中,从 iOS 开始。我坚持图像保存功能。在 swf 中,我使用 jpegencoder 保存到桌面服务器。经过一些研究,该代码似乎仍然可以在移动设备上运行,所以我尝试了它,但是在 Adob​​e AIR 的 iPhone 上进行测试时它似乎没有做任何事情(按钮注册了一次点击,但没有可以找到的图像,没有发生任何事情的通知,没有请求访问图像的许可等)。这是旧代码:

saveToDisc.addEventListener(MouseEvent.CLICK, saveToDiscSave);
function saveToDiscSave(e:MouseEvent):void {
    this.visible = false;  //hides menu

    var bitmapData:BitmapData = new BitmapData(1242,1864);
    bitmapData.draw(MovieClip(root));
    var jpgEncoder:JPGEncoder = new JPGEncoder(80);
    var byteArray:ByteArray = jpgEncoder.encode(bitmapData);
    var fileReference:FileReference=new FileReference();
    fileReference.save(byteArray, "Dinogeddon-DollDivine.jpg");

    //this.visible = true;  //returns menu. commented out to see if click registered
}

因此,通过更多研究,我发现 CameraRoll 代码看起来很简单,就像是专门为 iOS 制作的。所以我试过了,但我遇到了同样的问题:没有证据表明正在发生任何事情。没有保存图像,没有错误,没有权限请求。

saveToDisc.addEventListener(MouseEvent.CLICK, saveToDiscSave);
function saveToDiscSave(e:MouseEvent):void {
    this.visible = false;

    var cameraRoll:CameraRoll = new CameraRoll();
    var bitmapData:BitmapData = new BitmapData(1242,1864);
    bitmapData.draw(MovieClip(root));
    cameraRoll.addBitmapData(bitmapData);

    //this.visible = true;
}

就像,我什至不知道我哪里出错了。处于测试模式的应用程序甚至可以保存图像吗?我应该期待弹出某种通知吗?保存到 phone 的东西有大小限制吗?哈尔普

移动应用程序的行为与桌面应用程序非常相似,但您的代码并没有真正适应桌面应用程序。您甚至没有尝试使用专为桌面和移动设备制作的 classes,例如文件 class。无论如何,在我向您展示您需要忘记为 web 执行 swf(这是您的代码显示的)的步骤之前,您需要 mobile/desktop 应用程序,然后让您的想法适应它并使用 AIR classes。

首先,通过归档字节数组获取数据:

var byteArray:ByteArray = new ByteArray();
bitmapData.encode(new Rectangle(0,0,bitmapData.width,bitmapData.height), new PNGEncoderOptions(), byteArray);

其次,选择一个目的地(在移动设备上通常是 File.applicationStorageDirectory),然后使用 AIR class 文件。

var dest:File = File.applicationStorageDirectory.resolvePath("mypng.png");

第三,你得到了数据,你得到了目的地,现在使用 AIR class FileStream 进行保存:

var stream:FileStream = new FileStream();
stream.open(dest, FileMode.WRITE);
stream.writeBytes(byteArray);
stream.close();

仅此而已。使用 File class 在存储目录中创建目录和文件。请注意,在移动设备上,您将无法将文件保存在任何地方,这就是为什么使用 applicationStorageDirectory 更好,因为它始终可用并且已在沙盒中供您使用。

所以...相机胶卷代码确实有效,就像我拥有的​​一样。 这确实是一种非常好的和简洁的方法。 我想我在正确测试方面遇到了问题,只是无法判断它是否有效。

当正常工作时,它会在设备上请求一次权限,然后在没有通知的情况下保存,所以我添加了一些动画来隐藏保存按钮几秒钟,这样用户就不会自己过度发送垃圾邮件,并给出按下按钮的视觉提示。