コード例 #1
0
        /// <summary>
        /// ドラッグで選択された範囲のスクリーンショットを撮ってウィンドウに表示
        /// trimmedBitmapに保存用の画像を生成
        /// </summary>
        private void beginTakeSnapshot()
        {
            var window = new CaptureDragWindow();

            window.ReceiveDragAsync(resultRect =>
            {
                if (resultRect.Width < 10 || resultRect.Height < 10)
                {
                    return;
                }

                using (var screenBitmap = new System.Drawing.Bitmap((int)resultRect.Width, (int)resultRect.Height)) {
                    // ドラッグされた範囲のスクリーンショットを撮影
                    using (var g = Graphics.FromImage(screenBitmap)) {
                        g.CopyFromScreen((int)resultRect.Left, (int)resultRect.Top, 0, 0, screenBitmap.Size, System.Drawing.CopyPixelOperation.SourceCopy);
                    }

                    // 画像を表示
                    var hBitmap      = screenBitmap.GetHbitmap();
                    image.Source     = Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
                    image.Width      = screenBitmap.Width;
                    image.Height     = screenBitmap.Height;
                    image.Visibility = Visibility.Visible;

                    // トリミングされる範囲を表示
                    var trimRect             = measureTrimmingRect(screenBitmap);
                    trimRectangle.Margin     = new Thickness(trimRect.Left - 1, trimRect.Top - 1, screenBitmap.Width - trimRect.Right, screenBitmap.Height - trimRect.Bottom);
                    trimRectangle.Visibility = Visibility.Visible;

                    // 保存用のトリミングされたBitmapを用意
                    if (trimmedBitmap != null)
                    {
                        trimmedBitmap.Dispose();
                    }
                    trimmedBitmap = new System.Drawing.Bitmap(trimRect.Width, trimRect.Height, screenBitmap.PixelFormat);
                    using (var g = Graphics.FromImage(trimmedBitmap)) {
                        g.DrawImage(screenBitmap, 0, 0, trimRect, GraphicsUnit.Pixel);
                    }
                }
            });
        }
コード例 #2
0
ファイル: MainWindow.xaml.cs プロジェクト: sakano/TMTools
        /// <summary>
        /// ドラッグで選択された範囲のスクリーンショットを撮ってウィンドウに表示
        /// trimmedBitmapに保存用の画像を生成
        /// </summary>
        private void beginTakeSnapshot()
        {
            var window = new CaptureDragWindow();
            window.ReceiveDragAsync(resultRect =>
            {
                if (resultRect.Width < 10 || resultRect.Height < 10)
                    return;

                using (var screenBitmap = new System.Drawing.Bitmap((int)resultRect.Width, (int)resultRect.Height)) {
                    // ドラッグされた範囲のスクリーンショットを撮影
                    using (var g = Graphics.FromImage(screenBitmap)) {
                        g.CopyFromScreen((int)resultRect.Left, (int)resultRect.Top, 0, 0, screenBitmap.Size, System.Drawing.CopyPixelOperation.SourceCopy);
                    }

                    // 画像を表示
                    var hBitmap = screenBitmap.GetHbitmap();
                    image.Source = Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
                    image.Width = screenBitmap.Width;
                    image.Height = screenBitmap.Height;
                    image.Visibility = Visibility.Visible;

                    // トリミングされる範囲を表示
                    var trimRect = measureTrimmingRect(screenBitmap);
                    trimRectangle.Margin = new Thickness(trimRect.Left - 1, trimRect.Top - 1, screenBitmap.Width - trimRect.Right, screenBitmap.Height - trimRect.Bottom);
                    trimRectangle.Visibility = Visibility.Visible;

                    // 保存用のトリミングされたBitmapを用意
                    if (trimmedBitmap != null)
                        trimmedBitmap.Dispose();
                    trimmedBitmap = new System.Drawing.Bitmap(trimRect.Width, trimRect.Height, screenBitmap.PixelFormat);
                    using (var g = Graphics.FromImage(trimmedBitmap)) {
                        g.DrawImage(screenBitmap, 0, 0, trimRect, GraphicsUnit.Pixel);
                    }
                }
            });
        }