第一次在这里提问,如果我做错了,我很抱歉。
我正在使用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的方向。