c# winform
用pictureBox显示一个jpg图片,
当pictureBox 的 SizeMode 属性设置为Zoom时,
图片在pictureBox中是居中显示的,
也就是说在图片和pictureBox的上边和左边留有边距。在这种情况下,如何才能获取鼠标停留位置相对于图片的实际坐标?

解决方案 »

  1.   

    为什么不用  this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
      

  2.   

    参考http://bingning.net/free/source/graphics/index.html看看
      

  3.   

    哦那就难了,边和左边留有边距,留下的边距又是跟pictureBox1的大小有关还不知道比例
      

  4.   

    zoom的话,图片的中心和picturebox的中心应该是重合的。
    根据图片的高宽比例和picturebox的高宽比例,在结合边距的宽度,
    就可以建立实际坐标和图片坐标的映射。
    提供方法,具体的数据还有待兄台自己查找。
      

  5.   

    Bitmap MyImage = new Bitmap("1.bmp");
    x0=(PIctureBox1.width-MyImage.width)/2;
    y0=(PIctureBox1.heigth-MyImage.heigth)/2;
    点在图片范围内时,相对图片的坐标
    e.x-x0;
    e.y-y0;
      

  6.   

    zoom没想好
    如果是Normal 、AutoSize、StretchImage下鼠标坐标转换成实际坐标的问题我倒回答过请问大家一个Graphics写字的问题...没有在鼠标点击的位置显示...  [已结帖,结帖人:liruiaizhuzhu]
    http://topic.csdn.net/u/20081124/11/76408D75-F6F0-4754-813D-24FE5D7457DA.htmlnamespace WindowsApplication10
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
            {
                Bitmap Bmp = new Bitmap(pictureBox1.Image);
                Graphics graphics = Graphics.FromImage(Bmp);
                //设置字体
                Font font = new Font("黑体", 10, FontStyle.Bold);
                //测试文字
                string strTxt = "测试";
                //在鼠标点击位置写字.
                if (pictureBox1.SizeMode == PictureBoxSizeMode.Normal || 
                    pictureBox1.SizeMode == PictureBoxSizeMode.AutoSize) // 按实际像素
                    graphics.DrawString(strTxt, font, new SolidBrush(Color.Red), e.Location);
                else if (pictureBox1.SizeMode == PictureBoxSizeMode.StretchImage) // 按拉伸比例
                {
                    graphics.DrawString(strTxt, font, new SolidBrush(Color.Red),
                        e.Location.X * pictureBox1.Image.PhysicalDimension.Width / pictureBox1.Width,
                        e.Location.Y * pictureBox1.Image.PhysicalDimension.Height / pictureBox1.Height);
                }
                else if (pictureBox1.SizeMode == PictureBoxSizeMode.Zoom) 
                {
                    // 没想好
                }
                else if (pictureBox1.SizeMode == PictureBoxSizeMode.CenterImage)
                {
                    // 没想好
                }
                //释放
                graphics.Dispose();
                //显示写好字的图片
                this.pictureBox1.Image = Bmp;
                
            }
        }
    }
      

  7.   

    怎么让picturebox一直居中显示啊?扩大缩小都是居中的