2010-10-27 26 views
8

Tôi đang cố tích hợp tính năng chụp ảnh màn hình trong ứng dụng WPF của mình và tôi muốn nó trông giống như công cụ cắt.C# WPF chụp ảnh chụp màn hình với hiệu ứng SnippingTool

Cho đến nay, tôi đã quản lý được điều gì đó tương tự bằng cách tạo cửa sổ toàn màn hình (có canvas) với độ mờ được đặt thành 0,5 và nền tối. Khi tôi nhấp vào một nơi nào đó và bắt đầu kéo, một hình chữ nhật màu trắng được vẽ, tạo ra một hiệu ứng tương tự như this.

Điều tôi muốn có là phần bên trong của hình chữ nhật đó mở lỗ mờ trong khung nền, để tôi có thể nhìn xuyên qua khu vực được chọn - giống như công cụ cắt.

Sự cố là, khá mới đối với .NET, tôi không biết phải bắt đầu từ đâu. Đã làm một số nghiên cứu và thử nghiệm trên lĩnh vực OpacityMask của cửa sổ ảnh chụp màn hình nhưng không có nơi nào.

Dưới đây là little vid để hiển thị hiệu ứng hiện tại.

Chỉnh sửa: Ngoài ra, như câu hỏi tiền thưởng, có cách nào dễ dàng để chụp ảnh màn hình trải dài trên nhiều màn hình (màn hình ảo) không? Graphics.CopyFromScreen() chỉ hoạt động với 1 màn hình.
Đã cố định này và dường như làm việc cho tất cả các bố trí máy tính để bàn ảo lạ càng tốt:

// Capture screenie (rectangle is the area previously selected 
double left = Canvas.GetLeft(this.rectangle); 
double top = Canvas.GetTop(this.rectangle); 

// Calculate left/top offset regarding to primary screen (where the app runs) 
var virtualDisplay = System.Windows.Forms.SystemInformation.VirtualScreen; 
var primaryScreen = System.Windows.Forms.Screen.PrimaryScreen.Bounds; 
if (virtualDisplay.Left < primaryScreen.Left) 
{ 
    left -= Math.Abs(virtualDisplay.Left - primaryScreen.Left); 
} 
if (virtualDisplay.Top < primaryScreen.Top) 
{ 
    top -= Math.Abs(virtualDisplay.Top - primaryScreen.Top); 
} 
+1

liên quan: http://stackoverflow.com/questions/3123776/net-equivalent-of-snipping-tool/3124252#3124252 –

+0

Tôi thấy rằng bạn đã tiếp cận của grabbing một ảnh chụp màn hình máy tính để bàn. Không có ý nghĩa, mặc dù tôi muốn tránh nó! Ngoài ra, tôi đã nhận ra rằng CopyFromScreen có thể được cho ăn với các tọa độ âm (nếu màn hình khác của tôi nằm ở bên trái của chính) vì vậy bây giờ nó chỉ là vấn đề toán học :) – biasedbit

+0

Nếu bạn nhìn kỹ, công cụ cắt cũng lấy một ảnh chụp màn hình máy tính để bàn –

Trả lời

2

Bạn có thể có một CombinedGeometry với GeometryCombineMode="Exclude" tạo ra một hiệu ứng "đấm". Mẫu:

<Window x:Class="MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" AllowsTransparency="True" 
    WindowStyle="None" Background="Transparent"> 
    <Canvas > 
     <Path Stroke="Black" Fill="White" Opacity=".5"> 
      <Path.Data> 
       <CombinedGeometry GeometryCombineMode="Exclude"> 
        <CombinedGeometry.Geometry1> 
         <RectangleGeometry Rect="0,0,800,600" > 
         </RectangleGeometry> 
        </CombinedGeometry.Geometry1> 
        <CombinedGeometry.Geometry2> 
         <RectangleGeometry Rect="50,50,100,100" > 
         </RectangleGeometry> 
        </CombinedGeometry.Geometry2> 
       </CombinedGeometry> 
      </Path.Data> 
     </Path> 
    </Canvas> 
</Window> 
+0

Điều này hoạt động độc đáo nhưng có một vấn đề nhỏ: khi chuột di chuyển đến vùng "bị đục", bạn sẽ mất các sự kiện MouseMove. Tôi đoán tôi sẽ phải trộn giải pháp này với giải pháp được Hans Passant chỉ ra. Hiệu ứng đẹp, mặc dù! – biasedbit

+0

Tôi đã chơi xung quanh với điều này và, nếu được sử dụng kết hợp với cách tiếp cận lấy một ảnh chụp màn hình và sử dụng nó làm nền cửa sổ, nó tạo ra hiệu ứng mong muốn, vì vậy tôi đánh dấu nó là đúng - mặc dù tôi muốn giữ chế độ xem "trực tiếp" về những gì đang diễn ra trên màn hình nền (nghĩa là không có ảnh chụp màn hình trước khi lựa chọn). – biasedbit

+0

Vâng, tốt cho bạn. Tốt đẹp như giữ một cái nhìn trực tiếp sẽ được, tôi nghĩ rằng không có người dùng sẽ quan tâm hoặc thông báo. Trong thực tế, tôi thấy rằng công cụ snipping đã lấy một ảnh chụp màn hình bởi vì tôi nhìn vào nó, và tôi sử dụng công cụ tất cả các thời gian. –

Các vấn đề liên quan