Code Bye

使用wpf做屏幕截图,画出的矩形和截取的图形不同,偏移量很大,,可加分

如题,相关代码如下:
#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 取得的是鼠标相对屏幕的坐标(这个与显示分辨率无关)
扣去图片左上角相对屏幕的坐标,才是鼠标在图片上的坐标(这个才需要按显示分辨率折算)

20

应该有的
但本人不用 wpf,不是很清楚

20

我们的应用都不需要花里胡哨的界面,用 winform 足矣

20

1.相对位置计算错误
2.可以考虑是不是和dpi有关

20

本人用WinForm做过一个控件
http://st233.com/blog.php?id=28

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明使用wpf做屏幕截图,画出的矩形和截取的图形不同,偏移量很大,,可加分