使用 Haxe 读取 PNG 图像

And*_*een 5 haxe

使用Haxe编程语言,有没有什么跨平台的方式来读取PNG图片,并从图片中获取像素数据?

我有一个名为 stuff.png 的文件,我想从图像中获取一个 RGB 值数组(作为整数数组)。

小智 3

以下是使用 Haxe 格式库读取 PNG 文件的示例。您需要-lib format在编译器中添加 args/build.hxml:

function readPixels(file:String):{data:Bytes, width:Int, height:Int} {
    var handle = sys.io.File.read(file, true);
    var d = new format.png.Reader(handle).read();
    var hdr = format.png.Tools.getHeader(d);
    var ret = {
        data:format.png.Tools.extract32(d),
        width:hdr.width,
        height:hdr.height
    };
    handle.close();
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

下面是如何从上面获取 ARGB 像素数据的示例:

public static function main() {
  if (Sys.args().length == 0) {
    trace('usage: PNGReader <filename>');
    Sys.exit(1);
  }
  var filename = Sys.args()[0];
  var pixels = readPixels(filename);
  for (y in 0...pixels.height) {
    for (x in 0...pixels.width) {
      var p = pixels.data.getInt32(4*(x+y*pixels.width));
      // ARGB, each 0-255
      var a:Int = p>>>24;
      var r:Int = (p>>>16)&0xff;
      var g:Int = (p>>>8)&0xff;
      var b:Int = (p)&0xff;
      // Or, AARRGGBB in hex:
      var hex:String = StringTools.hex(p,8);
      trace('${ x },${ y }: ${ a },${ r },${ g },${ b } - ${ StringTools.hex(p,8) }');
    }
  }
Run Code Online (Sandbox Code Playgroud)