c# winform
用pictureBox显示一个jpg图片,
当pictureBox 的 SizeMode 属性设置为Zoom时,
图片在pictureBox中是居中显示的,
也就是说在图片和pictureBox的上边和左边留有边距。在这种情况下,如何才能获取鼠标停留位置相对于图片的实际坐标?
用pictureBox显示一个jpg图片,
当pictureBox 的 SizeMode 属性设置为Zoom时,
图片在pictureBox中是居中显示的,
也就是说在图片和pictureBox的上边和左边留有边距。在这种情况下,如何才能获取鼠标停留位置相对于图片的实际坐标?
根据图片的高宽比例和picturebox的高宽比例,在结合边距的宽度,
就可以建立实际坐标和图片坐标的映射。
提供方法,具体的数据还有待兄台自己查找。
x0=(PIctureBox1.width-MyImage.width)/2;
y0=(PIctureBox1.heigth-MyImage.heigth)/2;
点在图片范围内时,相对图片的坐标
e.x-x0;
e.y-y0;
如果是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;
}
}
}