メモ書きブログ

日々の覚書

コントロールのクリップボード

dpiで悩んだが無事にできるようになった。


            PresentationSource source = PresentationSource.FromVisual(this);
            double dpiX, dpiY;
            if (source != null)
            {
                var location = gridMychart.PointToScreen(new Point(0, 0));

                dpiX = gridMychart.ActualWidth * source.CompositionTarget.TransformToDevice.M11;
                dpiY = gridMychart.ActualHeight * source.CompositionTarget.TransformToDevice.M22;
                Debug.WriteLine(dpiX); Debug.WriteLine(dpiY);

                var bitmap = new System.Drawing.Bitmap((int)dpiX, (int)dpiY, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
                var graphics = System.Drawing.Graphics.FromImage(bitmap);
                graphics.CopyFromScreen(new System.Drawing.Point((int)(location.X), (int)(location.Y)), new System.Drawing.Point(0, 0), bitmap.Size);

                // グラフィックスの解放
                graphics.Dispose();
                System.Windows.Forms.Clipboard.SetImage(bitmap);
            }

参考 c# : WPF -Graphics.CopyFromScreen間違ったサイズのイメージを返します