openfl
Version:
A fast, productive library for 2D cross-platform development.
158 lines (140 loc) • 4.52 kB
JavaScript
// Class: format.png.Reader
var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this
$global.Object.defineProperty(exports, "__esModule", {value: true});
var __map_reserved = {};
// Imports
var $hxClasses = require("./../../hxClasses_stub").default;
var $hxEnums = require("./../../hxEnums_stub").default;
var $import = require("./../../import_stub").default;
function js__$Boot_HaxeError() {return require("./../../js/_Boot/HaxeError");}
function haxe_ds_List() {return require("./../../haxe/ds/List");}
function format_png_Chunk() {return require("./../../format/png/Chunk");}
function format_png_Color() {return require("./../../format/png/Color");}
function haxe_crypto_Crc32() {return require("./../../haxe/crypto/Crc32");}
function HxOverrides() {return require("./../../HxOverrides");}
function haxe_io_BytesInput() {return require("./../../haxe/io/BytesInput");}
// Constructor
var Reader = function(i) {
this.i = i;
i.set_bigEndian(true);
this.checkCRC = true;
}
// Meta
Reader.__name__ = "format.png.Reader";
Reader.__isInterface__ = false;
Reader.prototype = {
read: function() {
var b = 137;
if(this.i.readByte() != b) {
throw new (js__$Boot_HaxeError().default)("Invalid header");
}
var b1 = 80;
if(this.i.readByte() != b1) {
throw new (js__$Boot_HaxeError().default)("Invalid header");
}
var b2 = 78;
if(this.i.readByte() != b2) {
throw new (js__$Boot_HaxeError().default)("Invalid header");
}
var b3 = 71;
if(this.i.readByte() != b3) {
throw new (js__$Boot_HaxeError().default)("Invalid header");
}
var b4 = 13;
if(this.i.readByte() != b4) {
throw new (js__$Boot_HaxeError().default)("Invalid header");
}
var b5 = 10;
if(this.i.readByte() != b5) {
throw new (js__$Boot_HaxeError().default)("Invalid header");
}
var b6 = 26;
if(this.i.readByte() != b6) {
throw new (js__$Boot_HaxeError().default)("Invalid header");
}
var b7 = 10;
if(this.i.readByte() != b7) {
throw new (js__$Boot_HaxeError().default)("Invalid header");
}
var l = new (haxe_ds_List().default)();
while(true) {
var c = this.readChunk();
l.add(c);
if(c == (format_png_Chunk().default).CEnd) {
break;
}
}
return l;
},
readHeader: function(i) {
i.set_bigEndian(true);
var width = i.readInt32();
var height = i.readInt32();
var colbits = i.readByte();
var color = i.readByte();
var color1;
switch(color) {
case 0:
color1 = (format_png_Color().default).ColGrey(false);
break;
case 2:
color1 = (format_png_Color().default).ColTrue(false);
break;
case 3:
color1 = (format_png_Color().default).ColIndexed;
break;
case 4:
color1 = (format_png_Color().default).ColGrey(true);
break;
case 6:
color1 = (format_png_Color().default).ColTrue(true);
break;
default:
throw new (js__$Boot_HaxeError().default)("Unknown color model " + color + ":" + colbits);
}
var compress = i.readByte();
var filter = i.readByte();
if(compress != 0 || filter != 0) {
throw new (js__$Boot_HaxeError().default)("Invalid header");
}
var interlace = i.readByte();
if(interlace != 0 && interlace != 1) {
throw new (js__$Boot_HaxeError().default)("Invalid header");
}
return { width : width, height : height, colbits : colbits, color : color1, interlaced : interlace == 1};
},
readChunk: function() {
var dataLen = this.i.readInt32();
var id = this.i.readString(4);
var data = this.i.read(dataLen);
var crc = this.i.readInt32();
if(this.checkCRC) {
var c = new (haxe_crypto_Crc32().default)();
c.byte((HxOverrides().default).cca(id,0));
c.byte((HxOverrides().default).cca(id,1));
c.byte((HxOverrides().default).cca(id,2));
c.byte((HxOverrides().default).cca(id,3));
c.update(data,0,data.length);
if(c.get() != crc) {
throw new (js__$Boot_HaxeError().default)("CRC check failure");
}
}
switch(id) {
case "IDAT":
return (format_png_Chunk().default).CData(data);
case "IEND":
return (format_png_Chunk().default).CEnd;
case "IHDR":
return (format_png_Chunk().default).CHeader(this.readHeader(new (haxe_io_BytesInput().default)(data)));
case "PLTE":
return (format_png_Chunk().default).CPalette(data);
default:
return (format_png_Chunk().default).CUnknown(id,data);
}
}
};
Reader.prototype.__class__ = Reader.prototype.constructor = $hxClasses["format.png.Reader"] = Reader;
// Init
// Statics
// Export
exports.default = Reader;