如何直接将BitmapData保存为PNG文件而不需要任何对话框



第一次在这里提问,如果我做错了,我很抱歉。

我正在使用Haxeflixel(编译到c++),我一直在试图找出我如何编码和保存BitmapData作为PNG文件没有任何类型的对话框像sys. filessystem . savecontent和sys. filessystem . savebytes函数,但我尝试的每一种方法要么是无效的,不会编译或创建一个无效的PNG不能被读取为一个图像在所有

目前我基本上是这样的:

function saveBitmap(image:BitmapData)
{
var bytes:ByteArray = PNGEncoder.encode(image);
sys.FileSystem.saveBytes("assets/images/Encoded Image.png", bytes);
}

此代码编译并运行正常,但创建的PNG图像无效

谁能解释一下为什么这不起作用,以及我是如何使它实际工作的,因为我已经试图弄清楚这个问题太久了。

我已经设法使它工作使用

var bytes:ByteArray = image.encode(image.rect, new PNGEncoderOptions);

不是

var bytes:ByteArray = PNGEncoder.encode(image);

我猜要么PNGEncoder不工作,要么我用错了

编辑:创建的图像可以被我尝试过的一切读取,除了Haxeflxiel本身出于某种原因,我尝试过不同的BitmapData的不同方法,但它仍然是一样的,可以使用帮助了。

仅供参考,如果你正在编译成JavaScript,你将无法访问文件系统类。请参阅本页的"目标"列表。所以我假设你正在构建html5。

我目前正在做一个JavaScript目标项目,需要JSON文件下载(文本格式)。我使用一个名为FileSaver的外部JS库,加上来自haxelib的FileSaver外部(需要先安装)。它要求您将数据转换为"blob"第一。我的代码是做一个文本文件,但在你的情况下,你需要生成一个PNG,所以你可能需要传递你的ByteArray到Blob构造函数。像这样:

var bytes:ByteArray = PNGEncoder.encode(image);
var blob = new Blob([bytes],{type: "image/png"});
var fileName = "myImage.png";
FileSaver.saveAs(blob, fileName);

在你的project.xml中,你需要这一行:

<haxelib name="FileSaver"/>

在你的HTML中你需要库:

<script type="text/javascript" src="./js/FileSaver.min.js"></script>

我没有测试它,但这是我对HTML5的方向。