@@ -342,17 +342,7 @@ private void RegionClickCanvas_MouseUp(object sender, MouseButtonEventArgs e)
342342 RegionClickCanvas . ReleaseMouseCapture ( ) ;
343343 ClippingGeometry . Rect = new Rect ( new Point ( 0 , 0 ) , new Size ( 0 , 0 ) ) ;
344344
345- // Get the scaled dimensions of the selection border except the border thickness
346- var xDimScaled = ( Canvas . GetLeft ( _selectBorder ) + SelectBorderThickness ) * _dpiScale . Value . DpiScaleX ;
347- var yDimScaled = ( Canvas . GetTop ( _selectBorder ) + SelectBorderThickness ) * _dpiScale . Value . DpiScaleY ;
348-
349- // Get the scaled dimensions of the selection border except the border thickness
350- Rectangle regionScaled = new (
351- ( int ) xDimScaled ,
352- ( int ) yDimScaled ,
353- ( int ) ( ( _selectBorder . Width - 2 * SelectBorderThickness ) * _dpiScale . Value . DpiScaleX ) ,
354- ( int ) ( ( _selectBorder . Height - 2 * SelectBorderThickness ) * _dpiScale . Value . DpiScaleY ) ) ;
355-
345+ // 计算之前先移除边框
356346 try
357347 {
358348 RegionClickCanvas . Children . Remove ( _selectBorder ) ;
@@ -362,15 +352,38 @@ private void RegionClickCanvas_MouseUp(object sender, MouseButtonEventArgs e)
362352 // ignored
363353 }
364354
365- var absPosPoint = this . GetAbsolutePosition ( ) ;
355+ // 检查选择区域是否太小,如果是,则不截图
356+ if ( _selectBorder . Width <= 2 * SelectBorderThickness || _selectBorder . Height <= 2 * SelectBorderThickness )
357+ {
358+ CloseAllScreenGrabs ( ) ; // 即使不截图也关闭所有窗口
359+ return ;
360+ }
366361
367- var thisCorrectedLeft = ( int ) absPosPoint . X + regionScaled . Left ;
368- var thisCorrectedTop = ( int ) absPosPoint . Y + regionScaled . Top ;
362+ // 计算实际的、经过DPI缩放的选择区域尺寸
363+ var xDimScaled = ( Canvas . GetLeft ( _selectBorder ) + SelectBorderThickness ) * _dpiScale . Value . DpiScaleX ;
364+ var yDimScaled = ( Canvas . GetTop ( _selectBorder ) + SelectBorderThickness ) * _dpiScale . Value . DpiScaleY ;
365+
366+ // 确保宽高至少为1像素
367+ var scaledWidth = Math . Max ( 1 , ( _selectBorder . Width - 2 * SelectBorderThickness ) * _dpiScale . Value . DpiScaleX ) ;
368+ var scaledHeight = Math . Max ( 1 , ( _selectBorder . Height - 2 * SelectBorderThickness ) * _dpiScale . Value . DpiScaleY ) ;
369369
370- var correctedRegion = regionScaled with { X = thisCorrectedLeft , Y = thisCorrectedTop } ;
370+ Rectangle regionScaled = new (
371+ ( int ) xDimScaled ,
372+ ( int ) yDimScaled ,
373+ ( int ) scaledWidth ,
374+ ( int ) scaledHeight ) ;
375+
376+ // 计算绝对屏幕位置
377+ var absPosPoint = this . GetAbsolutePosition ( ) ;
378+ var correctedRegion = regionScaled with
379+ {
380+ X = ( int ) absPosPoint . X + regionScaled . Left ,
381+ Y = ( int ) absPosPoint . Y + regionScaled . Top
382+ } ;
383+
384+ // 截图并回调
371385 var bitmap = correctedRegion . GetRegionOfScreenAsBitmap ( ) ;
372386 CloseAllScreenGrabs ( ) ;
373-
374387 _onImageCaptured ? . Invoke ( bitmap ) ;
375388 }
376389
0 commit comments