public static IEnumerable<Rectangle> ComputeView(this Page page, IPageViewer viewer) { viewer.ViewTransformation = Page.ReadingDirectionToMatrix(page.Direction); IEnumerable<Rectangle> view = viewer.ComputeView(page.TransformedCells); Matrix invert = Page.ReadingDirectionToInverseMatrix(page.Direction); return (from rectangle in view select rectangle.Transform(invert)); }
private void NotifyPropertyChanged([CallerMemberName] string propertyName = "") { _viewer = null; if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } }
private IPageViewer getViewer() { if (_viewer == null) { switch (_viewMode) { case MangaConfiguration.ViewModeKind.Strip: _viewer = new StripPageViewer(_width, _height); break; case MangaConfiguration.ViewModeKind.Cell: _viewer = new CellsPageViewer(_width, _height); break; case MangaConfiguration.ViewModeKind.Free: _viewer = new FullPageViewer(); break; default: _viewer = null; break; } if (_viewer != null) _viewer.ViewTransformation = _viewTransformation; } return _viewer; }
private Bitmap drawPageView(Bitmap input, IPageViewer viewer) { return MakeBitmap(input.Width, input.Height, (Graphics g) => { Page page = getPage(input); using (Pen p = new Pen(Color.Red, 3)) { g.DrawImageUnscaled(input, 0, 0); System.Drawing.Point? lastPoint = null; foreach (var rectangle in page.ComputeView(viewer)) { g.DrawRectangle(p, rectangle); var newPoint = rectangleCenter(rectangle); if (lastPoint != null) { drawArrow(g, Color.DarkGreen, lastPoint.Value, newPoint); } lastPoint = newPoint; } } }); }