public void CalculateRect(Rectangle rectDraw, out Rectangle rectScreen, out Rectangle rectGenerate) { RectangleF rect = rectDraw; SizeF ratio = ZoomRatio; //rect = rectScreen; rect /= ratio; rect.Align(1, 1); rect.Inflate(1, 1); Size size = Size; while (rect.Top > 0 && ((rect.Top * ratio.Height) % 1.0F) > 0.2F) { rect.Top--; } while (rect.Left > 0 && ((rect.Left * ratio.Width) % 1.0F) > 0.2F) { rect.Left--; } while (rect.InnerBottom < size.Height && ((rect.InnerBottom * ratio.Height) % 1.0F) > 0.2F) { rect.InnerBottom++; } while (rect.InnerRight < size.Width && ((rect.InnerRight * ratio.Width) % 1.0F) > 0.2F) { rect.InnerRight++; } rect.Restrict(PointF.Empty, Size); rectGenerate = Rectangle.Round(rect); rect = rectGenerate; rect *= ratio; rectScreen = Rectangle.Round(rect); /* */ //Console.WriteLine("{0} - {1}", rectScreen, rectGenerate); }