使用TrackBar按比例放大/缩小Picturebox

时间:2016-02-06 00:31:37

标签: c# .net winforms picturebox trackbar

我正在使用WinForms。在我的形式我有一个图片框,我想使用轨迹栏放大和缩小。我的图片框设置为缩放模式。我想拖动栏时图像和图片框的比例高度/宽度。我怎么能做到这一点?

    private void Open_btn_Click(object sender, EventArgs e)
    {
        OpenFileDialog openFileDialog1 = new OpenFileDialog();

        if(openFileDialog1.ShowDialog() == DialogResult.OK)
        {
            Image bmp;
            bmp = new Bitmap(openFileDialog1.FileName);
            if (bmp == null)
            {
                MessageBox.Show("Loading image failed", "Error", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

            }
            else
            {
                pictureBox1.Image = bmp;
                openFileDialog1.Dispose();
            }

        }

    }

    private void zoomSlider_Scroll(object sender, EventArgs e)
    {
        if(TrackBar1.Value == 1)
        {
            pictureBox1.Height += 50;
            pictureBox1.Width +=  50;

        }

        if(TrackBar1.Value == 2)
        {
            pictureBox1.Height += 100;
            pictureBox1.Width += 100;
        }

        if(TrackBar1.Value == 3)
        {
            pictureBox1.Height += 200;
            pictureBox1.Width += 200; 
        }

    //This is not exactly what i had in mind...
    }

enter image description here

1 个答案:

答案 0 :(得分:1)

最初创建表单时,您必须保存大小

Form1 : Form
{
   private Size _pictOriginalSize;
   Form1()
   {
       InitialiseComponent();
       _pictOriginalSize = pictureBox1.Size;
       zoomSlider.Minimum = 0;
       zoomSldier.Maximum = 1000;
       ...
   }

现在你知道 unzoomed 大小是什么了。

接下来,您将需要将滑块的值转换为比例因子。

private void zoomSlider_Scroll(object sender, EventArgs e)
{
    const double MaxScale = 5.0; // The scale factor when the is at it's max

    double scale = Math.Pow(MaxScale, TrackBar1.Value / TrackBar1.Maximum);

    Size newSize = new Size((int) (_pictOrignalSize.Width * scale),
                   (int) (_pictOrignalSize.Height * scale));

    pictureBox.Size = newSize;
}

我正在使用Math.Pow函数以指数级别将比例从1转换为5 - 您可能想要使用您可以考虑的其他技术

  • 让滑块的值为1到5,而Value只是缩放比例:scale = zoomSlider.Value - 但这只会给你一个1的结果。
  • 让滑块的值为1到5000并进行双重分割double scale = zoomSlider.Value / 1000.0;这样可以获得1000种不同的分辨率。

注意:我仅使用5作为示例 - 您可以使用任何值作为最大比例因子。