Как увеличить прямоугольник? - PullRequest
0 голосов
/ 03 июля 2010

Я нарисовал прямоугольник. Он находится под горизонтальной полосой прокрутки на экране. Теперь я хочу увеличить прямоугольник. При увеличении увеличивается высота прямоугольника, местоположение перемещается вверх, а горизонтальная полоса прокрутки перемещается вверх. Как это сделать? Я пишу этот кусок кода:

rect = new Rectangle(rect.Location.X, this.Height - rect.Height,rect.Width, Convert.ToInt32(rect.Size.Height * zoom));
g.FillRectangle(brush, rect);

Это работает для местоположения прямоугольника, который является смещением прямоугольника, но высота не увеличивается. Помогите!

Ответы [ 2 ]

1 голос
/ 03 июля 2010

Если вы просто хотите масштабировать прямоугольник вокруг центра прямоугольника, то вам нужно увеличить ширину и высоту прямоугольника и вычесть половину увеличения от местоположения.

Это не проверено, нодолжен дать вам общее представление

double newHeight = oldHeight * scale;
double deltaY = (newHeight - oldHeight) * 0.5;

rect = new Rectangle(
  rect.Location.X, (int)(rect.Location.Y - deltaY), 
  rect.Width, (int)newHeight);

Возможно, лучшая альтернатива будет смотреть на использование Graphics.ScaleTransform .

0 голосов
/ 04 июля 2010

Просто добавьте txtZoom в вашу форму:

using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.txtZoom.Text = "1";
            this.txtZoom.KeyDown += new KeyEventHandler(txtZoom_KeyDown);
            this.txtZoom_KeyDown(txtZoom, new KeyEventArgs(Keys.Enter));
        }

        void txtZoom_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
            {
                this.Zoom = int.Parse(txtZoom.Text);
                this.Invalidate();
            }
        }

        public int Zoom { get; set; }

        protected override void OnPaint(PaintEventArgs e)
        {
            GraphicsPath path = new GraphicsPath();
            path.AddRectangle(new Rectangle(10, 10, 100, 100));

            Matrix m = new Matrix();
            m.Scale(Zoom, Zoom);

            path.Transform(m);
            this.AutoScrollMinSize = Size.Round(path.GetBounds().Size);

            e.Graphics.FillPath(Brushes.Black, path);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...