BingマップのWPFコントロールを使用してWPFアプリケーションを作成しました。 Bingマップコントロールのみのスクリーンショットを作成したいと思います。
このコードを使用してスクリーンショットを作成します:
// Store the size of the map control
int Width = (int)MyMap.RenderSize.Width;
int Height = (int)MyMap.RenderSize.Height;
System.Windows.Point relativePoint = MyMap.TransformToAncestor(Application.Current.MainWindow).Transform(new System.Windows.Point(0, 0));
int X = (int)relativePoint.X;
int Y = (int)relativePoint.Y;
Bitmap Screenshot = new Bitmap(Width, Height);
Graphics G = Graphics.FromImage(Screenshot);
// snip wanted area
G.CopyFromScreen(X, Y, 0, 0, new System.Drawing.Size(Width, Height), CopyPixelOperation.SourceCopy);
string fileName = "C:\\myCapture.bmp";
System.IO.FileStream fs = System.IO.File.Open(fileName, System.IO.FileMode.OpenOrCreate);
Screenshot.Save(fs, System.Drawing.Imaging.ImageFormat.Bmp);
fs.Close();
私の問題:
Width
とHeight
は不良(偽の値)のようです。作成されたスクリーンショットは、不適切な座標を使用しているようです。
私のスクリーンショット:
私が期待するもの:
なぜこの結果が得られるのですか?リリースモードで試してみましたが、Visual Studioなしでは結果は同じです。
スクリーンショットは、画面のショットです...画面上のすべて。必要なのは、単一のUIElement
から画像を保存することです。 RenderTargetBitmap.Render
メソッド 。このメソッドはVisual
入力パラメーターを取りますが、幸いなことに、これはすべてのUIElement
sの基本クラスの1つです。 .pngファイルを保存したい場合、これを行うことができます。
RenderTargetBitmap renderTargetBitmap =
new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);
renderTargetBitmap.Render(yourMapControl);
PngBitmapEncoder pngImage = new PngBitmapEncoder();
pngImage.Frames.Add(BitmapFrame.Create(renderTargetBitmap));
using (Stream fileStream = File.Create(filePath))
{
pngImage.Save(fileStream);
}