如题,相关代码如下:
#region –取得图像感兴趣区域:矩形–
//图像原始分辨率
ImageFileInfo fi = (ImageFileInfo)(((TabItem)tabControl.SelectedItem).Tag);
double PicPixelHeight = fi.getCurPicPixelHeight();
double PicPixelWidth = fi.getCurPicPixelWidth();
//图像原始分辨率和显示分辨率的比例
double HeightProportion =( PicPixelHeight/ image1[controlNumber].Height )* 1000;
double WidthProportion = (PicPixelWidth/ image1[controlNumber].Width )* 1000;
// 截取图形左上角的点 (鼠标按下时获取到的)
ImageSetROIx = ((int)p.X * (int)WidthProportion)/ 1000;
ImageSetROIy = ((int)p.Y * (int)WidthProportion) / 1000;
ImageSetROIx2 =( (int)p.X * (int)HeightProportion) / 1000;
ImageSetROIy2 =( (int)p.Y * (int)HeightProportion) / 1000;
//画矩形
if (WarpPerspective == 2)
{
++i_Rectangle;
IsMove = false;
Point p = new Point();
p = Mouse.GetPosition(inkCanv[imgNumber]);//p = Mouse.GetPosition((IInputElement)sender);
******************************************************************************************************
//截取图形的 左上角的点 长 宽(鼠标左键弹起)
if (ImageSetROIx< (int)p.X)
{
ImageSetROIwidth = (((int)p.X – ImageSetROIx)* (int)WidthProportion)/1000;
}
if (ImageSetROIx > (int)p.X)
{
ImageSetROIwidth = ((ImageSetROIx – (int)p.X)* (int)WidthProportion )/ 1000;
ImageSetROIx = (((int)p.X) * (int)WidthProportion) / 1000;
}
if (ImageSetROIy < (int)p.Y)
{
ImageSetROIheight = (((int)p.Y – ImageSetROIy) * (int)HeightProportion) / 1000;
}
if (ImageSetROIy > (int)p.Y)
{
ImageSetROIheight = ((ImageSetROIy – (int)p.Y) * (int)HeightProportion) / 1000;
ImageSetROIy = (((int)p.Y) * (int)HeightProportion) / 1000;
}
}
#endregion
#region –取得图像感兴趣区域:矩形–
//图像原始分辨率
ImageFileInfo fi = (ImageFileInfo)(((TabItem)tabControl.SelectedItem).Tag);
double PicPixelHeight = fi.getCurPicPixelHeight();
double PicPixelWidth = fi.getCurPicPixelWidth();
//图像原始分辨率和显示分辨率的比例
double HeightProportion =( PicPixelHeight/ image1[controlNumber].Height )* 1000;
double WidthProportion = (PicPixelWidth/ image1[controlNumber].Width )* 1000;
// 截取图形左上角的点 (鼠标按下时获取到的)
ImageSetROIx = ((int)p.X * (int)WidthProportion)/ 1000;
ImageSetROIy = ((int)p.Y * (int)WidthProportion) / 1000;
ImageSetROIx2 =( (int)p.X * (int)HeightProportion) / 1000;
ImageSetROIy2 =( (int)p.Y * (int)HeightProportion) / 1000;
//画矩形
if (WarpPerspective == 2)
{
++i_Rectangle;
IsMove = false;
Point p = new Point();
p = Mouse.GetPosition(inkCanv[imgNumber]);//p = Mouse.GetPosition((IInputElement)sender);
******************************************************************************************************
//截取图形的 左上角的点 长 宽(鼠标左键弹起)
if (ImageSetROIx< (int)p.X)
{
ImageSetROIwidth = (((int)p.X – ImageSetROIx)* (int)WidthProportion)/1000;
}
if (ImageSetROIx > (int)p.X)
{
ImageSetROIwidth = ((ImageSetROIx – (int)p.X)* (int)WidthProportion )/ 1000;
ImageSetROIx = (((int)p.X) * (int)WidthProportion) / 1000;
}
if (ImageSetROIy < (int)p.Y)
{
ImageSetROIheight = (((int)p.Y – ImageSetROIy) * (int)HeightProportion) / 1000;
}
if (ImageSetROIy > (int)p.Y)
{
ImageSetROIheight = ((ImageSetROIy – (int)p.Y) * (int)HeightProportion) / 1000;
ImageSetROIy = (((int)p.Y) * (int)HeightProportion) / 1000;
}
}
#endregion
解决方案
20
计算问题吧?
Mouse.GetPosition 取得的是鼠标相对屏幕的坐标(这个与显示分辨率无关)
扣去图片左上角相对屏幕的坐标,才是鼠标在图片上的坐标(这个才需要按显示分辨率折算)
Mouse.GetPosition 取得的是鼠标相对屏幕的坐标(这个与显示分辨率无关)
扣去图片左上角相对屏幕的坐标,才是鼠标在图片上的坐标(这个才需要按显示分辨率折算)
20
应该有的
但本人不用 wpf,不是很清楚
但本人不用 wpf,不是很清楚
20
我们的应用都不需要花里胡哨的界面,用 winform 足矣
20
1.相对位置计算错误
2.可以考虑是不是和dpi有关
2.可以考虑是不是和dpi有关
20
本人用WinForm做过一个控件
http://st233.com/blog.php?id=28
http://st233.com/blog.php?id=28