RectD ImagesEngine::Transform(RectD rect, int pageNo, float zoom, int rotation, bool inverse) { PointF pts[2] = { PointF((REAL)rect.x, (REAL)rect.y), PointF((REAL)(rect.x + rect.dx), (REAL)(rect.y + rect.dy)) }; Matrix m; GetTransform(m, pageNo, zoom, rotation); if (inverse) m.Invert(); m.TransformPoints(pts, 2); rect = RectD::FromXY(pts[0].X, pts[0].Y, pts[1].X, pts[1].Y); // try to undo rounding errors caused by a rotation // (necessary correction determined by experimentation) if (rotation != 0) rect.Inflate(-0.01, -0.01); return rect; }
virtual RectD PageContentBox(int pageNo, RenderTarget target=Target_View) { RectD mbox = PageMediabox(pageNo); mbox.Inflate(-pageBorder, -pageBorder); return mbox; }