public void Render(TextWriter sw) { sw.WriteLine(@" <style> #container { position:relative; } img { width: 336px; height: 414px; } th{ font-size: 40 } .highlight { position:absolute; width: 56px; height:52px; border: 2px solid red; } .crop0-left{ left:0px; } .crop1-left{ left:56px; } .crop2-left{ left:112px; } .crop3-left{ left:168px; } .crop4-left{ left:224px; } .crop5-left{ left:280px; } .crop0-top{ top:0px; } .crop1-top{ top:52px; } .crop2-top{ top:103px; } .crop3-top{ top:155px; } .crop4-top{ top:207px; } .crop5-top{ top:259px; } .crop6-top{ top:310px; } .crop7-top{ top:362px; }"); // td:first-child{ // border:5px solid lime; //} sw.WriteLine("</style>"); sw.WriteLine("<table>"); var names = ImageEncoding.ToDictionary(x => x.Value, x => x.Key); var patches = PatchEncoding.ToDictionary(x => x.Value, x => x.Key); foreach (var row in Rows.Take(3000)) { sw.WriteLine(row.ToString(names, patches)); } sw.WriteLine("</table>"); }