我正在使用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...
}
答案 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 - 您可能想要使用您可以考虑的其他技术
scale = zoomSlider.Value
- 但这只会给你一个1的结果。double scale = zoomSlider.Value / 1000.0;
这样可以获得1000种不同的分辨率。注意:我仅使用5作为示例 - 您可以使用任何值作为最大比例因子。