private bool ReadRecord(Stream stream, EmfContext context, XmlWriter output) { byte[] header = ByteUtility.Read(stream, 6); int size = ReadInt32(header, 0); short function = ReadInt16(header, 4); if (function == 0) { return(false); } byte[] parameters = ByteUtility.Read(stream, (int)((size - 3) * 2)); if (function == META_SETBKCOLOR) { context.BackgroundColor = ReadColor(parameters, 0); } else if (function == META_SETBKMODE) { context.BackgroundMode = ReadInt16(parameters, 0); } else if (function == META_SETMAPMODE) { context.MappingMode = ReadInt16(parameters, 0); } else if (function == META_SETROP2) { HandleNotImplemented("META_SETROP2", parameters); } else if (function == META_SETPOLYFILLMODE) { context.PolyFillMode = ReadInt16(parameters, 0); } else if (function == META_SETSTRETCHBLTMODE) { HandleNotImplemented("META_SETSTRETCHBLTMODE", parameters); } else if (function == META_SETTEXTCOLOR) { context.TextColor = ReadColor(parameters, 0); } else if (function == META_SETTEXTCHAREXTRA) { HandleNotImplemented("META_SETTEXTCHAREXTRA", parameters); } else if (function == META_SETWINDOWORG) { context.WindowOrg = ReadPoint(parameters, 0, false, null); } else if (function == META_SETWINDOWEXT) { context.WindowExt = ReadPoint(parameters, 0, false, null); } else if (function == META_SETVIEWPORTORG) { context.ViewPortOrg = ReadPoint(parameters, 0, false, null); } else if (function == META_SETVIEWPORTEXT) { context.ViewPortExt = ReadPoint(parameters, 0, false, null); } else if (function == META_OFFSETWINDOWORG) { context.OffsetWindowOrg = ReadPoint(parameters, 0, false, null); } else if (function == META_SCALEWINDOWEXT) { //context.ScaleWindowExt = new Scale(parameters); HandleNotImplemented("META_EXCLUDECLIPRECT", parameters); } else if (function == META_OFFSETVIEWPORTORG) { context.OffsetViewPortOrg = ReadPoint(parameters, 0, false, null); } else if (function == META_SCALEVIEWPORTEXT) { //context.ScaleViewPortExt = new Scale(parameters); HandleNotImplemented("META_EXCLUDECLIPRECT", parameters); } else if (function == META_LINETO) { WriteLine(parameters, context, output); } else if (function == META_MOVETO) { context.CurrentPosition = ReadPoint(parameters, 0, false, context); } else if (function == META_EXCLUDECLIPRECT) { HandleNotImplemented("META_EXCLUDECLIPRECT", parameters); } else if (function == META_INTERSECTCLIPRECT) { HandleNotImplemented("META_INTERSECTCLIPRECT", parameters); } else if (function == META_ARC) { WriteArc(parameters, context, output); } else if (function == META_ELLIPSE) { WriteEllipse(parameters, context, output); } else if (function == META_FLOODFILL) { HandleNotImplemented("META_FLOODFILL", parameters); } else if (function == META_PIE) { HandleNotImplemented("META_PIE", parameters); } else if (function == META_RECTANGLE) { WriteRectangle(parameters, context, output); } else if (function == META_ROUNDRECT) { HandleNotImplemented("META_ROUNDRECT", parameters); } else if (function == META_PATBLT) { HandleNotImplemented("META_PATBLT", parameters); } else if (function == META_SAVEDC) { HandleNotImplemented("META_SAVEDC", parameters); } else if (function == META_SETPIXEL) { HandleNotImplemented("META_SETPIXEL", parameters); } else if (function == META_OFFSETCLIPRGN) { HandleNotImplemented("META_OFFSETCLIPRGN", parameters); } else if (function == META_POLYGON) { WritePolygon(parameters, context, output); } else if (function == META_POLYLINE) { WritePolyline(parameters, context, output); } else if (function == META_ESCAPE) { HandleNotImplemented("META_ESCAPE", parameters); } else if (function == META_RESTOREDC) { HandleNotImplemented("META_RESTOREDC", parameters); } else if (function == META_FILLREGION) { HandleNotImplemented("META_FILLREGION", parameters); } else if (function == META_FRAMEREGION) { HandleNotImplemented("META_FRAMEREGION", parameters); } else if (function == META_INVERTREGION) { HandleNotImplemented("META_INVERTREGION", parameters); } else if (function == META_PAINTREGION) { HandleNotImplemented("META_PAINTREGION", parameters); } else if (function == META_SELECTCLIPREGION) { short index = ReadInt16(parameters, 0); context.SelectObject(index); } else if (function == META_SELECTOBJECT) { short index = ReadInt16(parameters, 0); context.SelectObject(index); } else if (function == META_SETTEXTALIGN) { HandleNotImplemented("META_SETTEXTALIGN", parameters); } else if (function == META_CHORD) { HandleNotImplemented("META_CHORD", parameters); } else if (function == META_SETMAPPERFLAGS) { HandleNotImplemented("META_SETMAPPERFLAGS", parameters); } else if (function == META_TEXTOUT) { HandleNotImplemented("META_TEXTOUT", parameters); } else if (function == META_EXTTEXTOUT) { HandleNotImplemented("META_EXTTEXTOUT", parameters); } else if (function == META_SETDIBTODEV) { HandleNotImplemented("META_SETDIBTODEV", parameters); } else if (function == META_POLYPOLYGON) { WritePolyPolygon(parameters, context, output); } else if (function == META_DIBBITBLT) { HandleNotImplemented("META_DIBBITBLT", parameters); } else if (function == META_DIBSTRETCHBLT) { HandleNotImplemented("META_DIBSTRETCHBLT", parameters); } else if (function == META_EXTFLOODFILL) { HandleNotImplemented("META_EXTFLOODFILL", parameters); } else if (function == META_DELETEOBJECT) { short index = ReadInt16(parameters, 0); context.RemoveObject(index); } else if (function == META_CREATEPENINDIRECT) { context.AddObject(new Pen(parameters)); } else if (function == META_CREATEFONTINDIRECT) { context.AddObject(new object()); HandleNotImplemented("META_CREATEFONTINDIRECT", parameters); } else if (function == META_CREATEBRUSHINDIRECT) { context.AddObject(new Brush(parameters)); } else if (function == META_CREATEREGION) { context.AddObject(new object()); HandleNotImplemented("META_CREATEREGION", parameters); } else if (function == META_STRETCHDIB) { HandleNotImplemented("META_STRETCHDIB", parameters); } else if (function == META_SETTEXTJUSTIFICATION) { HandleNotImplemented("META_SETTEXTJUSTIFICATION", parameters); } else if (function == META_BITBLT) { HandleNotImplemented("META_BITBLT", parameters); } else if (function == META_STRETCHBLT) { HandleNotImplemented("META_STRETCHBLT", parameters); } else if (function == META_CREATEPATTERNBRUSH) { context.AddObject(new object()); HandleNotImplemented("META_CREATEPATTERNBRUSH", parameters); } else if (function == META_SELECTPALETTE) { short index = ReadInt16(parameters, 0); context.SelectObject(index); } else if (function == META_REALIZEPALETTE) { HandleNotImplemented("META_REALIZEPALETTE", parameters); } else if (function == META_ANIMATEPALETTE) { HandleNotImplemented("META_ANIMATEPALETTE", parameters); } else if (function == META_SETPALENTRIES) { HandleNotImplemented("META_SETPALENTRIES", parameters); } else if (function == META_RESIZEPALETTE) { HandleNotImplemented("META_RESIZEPALETTE", parameters); } else if (function == META_CREATEPALETTE) { context.AddObject(new object()); HandleNotImplemented("META_CREATEPALETTE", parameters); } else if (function == META_SETRELABS) { HandleNotImplemented("META_SETRELABS", parameters); } else { OnWarning(Resources.MessageEmfFunctionUnknown, function); } return(true); }