public InstanceTree LoadData(Stream stream) { InstanceTree tree = new InstanceTree(); StructInstance instance = new StructInstance(this, tree, stream, stream.Position); tree.AddChild(instance); return(tree); }
public virtual int GetInstanceDataSize(StructCell cell, StructInstance instance) { int?cellSize = instance.GetCellSize(cell); if (cellSize.HasValue) { return(cellSize.Value); } return(GetDataSize()); }
public StructInstance(StructDef def, InstanceTreeNode parent, Stream stream, StructInstance followInstance, bool followChildren) { SequenceIndex = -1; _def = def; _parent = parent; _stream = stream; _followInstance = followInstance; _followChildren = followChildren; }
protected void LoadChildFields(BinaryReader reader, StructInstance instance) { foreach (StructField field in ChildFields) { if (!field.IsLinked) { field.LoadData(reader, instance); } } }
public override Image Decode(Stream inputStream, StructInstance instance) { var metaInstance = (StructInstance) instance.Parent.Parent.Children[0].Children[0]; int width = metaInstance.EvaluateSymbol("SceneWidth").ToInt32(CultureInfo.CurrentCulture); int height = metaInstance.EvaluateSymbol("SceneHeight").ToInt32(CultureInfo.CurrentCulture); byte[] pixelData = new byte[width*height]; instance.Stream.Read(pixelData, 0, width*height); Color[] palette = LoadPalette(metaInstance); return CreateBitmapWithPalette(width, height, pixelData, palette); }
private static Color[] LoadPalette(StructInstance instance) { var colorCount = instance.EvaluateSymbol("PaletteColors").ToInt32(CultureInfo.CurrentCulture); instance.Stream.Seek(instance.Offset + 6, SeekOrigin.Begin); var result = new Color[colorCount+4]; result[0] = Color.FromArgb(0, 0, 0); result[1] = Color.FromArgb(0x54, 0x54, 0x54); result[2] = Color.FromArgb(0xb4, 0xb4, 0xb4); result[3] = Color.FromArgb(0xff, 0xff, 0xff); for(int i=0; i<colorCount; i++) { int r = instance.Stream.ReadByte(); int g = instance.Stream.ReadByte(); int b = instance.Stream.ReadByte(); instance.Stream.Seek(3, SeekOrigin.Current); result[i+4] = Color.FromArgb(r*4, g*4, b*4); } return result; }
public InstanceTree LoadData(Stream stream) { InstanceTree tree = new InstanceTree(); StructInstance instance = new StructInstance(this, tree, stream, stream.Position); tree.AddChild(instance); return tree; }
public DependencyTrackingContext(StructInstance instance, StructCell cell) : base(instance) { _instance = instance; _cell = cell; }
public ExprCell(StructField def, StructInstance instance, Expression expression) : base(def) { _instance = instance; _expression = expression; }
public int GetDataSize(StructInstance instance) { return(_def.GetInstanceDataSize(this, instance)); }
protected void AddCell(StructInstance instance, IConvertible value, string displayValue, int offset) { instance.AddCell(new ValueCell(this, value, displayValue, offset), _hidden); }
protected void AddCell(StructInstance instance, Expression expr) { instance.AddCell(new ExprCell(this, instance, expr), _hidden); }
public abstract void LoadData(BinaryReader reader, StructInstance instance);
protected void LoadChildFields(BinaryReader reader, StructInstance instance) { foreach (StructField field in ChildFields) { if (!field.IsLinked) field.LoadData(reader, instance); } }
public void LoadInstanceData(StructInstance instance, Stream stream) { BinaryReader reader = new BinaryReader(stream); foreach (StructField field in _fields) { if (field.IsLinked) continue; try { field.LoadData(reader, instance); } catch(LoadDataException ex) { instance.AddCell(ValueCell.CreateErrorCell(field, ex.Message), false); break; } catch(IOException ex) { instance.AddCell(ValueCell.CreateErrorCell(field, ex.Message), false); break; } } long offset = instance.GetLastRewindOffset(); if (offset != -1) stream.Position = offset; }
public virtual int GetInstanceDataSize(StructCell cell, StructInstance instance) { int? cellSize = instance.GetCellSize(cell); if (cellSize.HasValue) return cellSize.Value; return GetDataSize(); }
public int GetDataSize(StructInstance instance) { return _def.GetInstanceDataSize(this, instance); }
protected StructCell AddCell(StructInstance instance, IConvertible value, int offset) { StructCell cell = new ValueCell(this, value, offset); instance.AddCell(cell, _hidden); return cell; }