WPF: Façon de faire des captures d'écran

Qui cherchent à modifier les suivantes pour prendre une capture d'écran large de tous les moniteurs. J'ai essayé de l'adapter, mais mes images sont vides. De l'écriture à l'essai.png est pour les tests. Le byte[] sera envoyé à l'application réceptrice.

public byte[] Take()
{
int screenWidth = Convert.ToInt32(SystemParameters.VirtualScreenWidth);
int screenHeight = Convert.ToInt32(SystemParameters.VirtualScreenHeight);
int screenLeft = Convert.ToInt32(SystemParameters.VirtualScreenLeft);
int screenTop = Convert.ToInt32(SystemParameters.VirtualScreenTop);
RenderTargetBitmap renderTarget = new RenderTargetBitmap(screenWidth, screenHeight, 96, 96, PixelFormats.Pbgra32);
VisualBrush sourceBrush = new VisualBrush();
DrawingVisual drawingVisual = new DrawingVisual();
DrawingContext drawingContext = drawingVisual.RenderOpen();
using (drawingContext)
{
drawingContext.PushTransform(new ScaleTransform(1, 1));
drawingContext.DrawRectangle(sourceBrush, null, new Rect(new Point(0, 0), new Point(screenWidth, screenHeight)));
}
renderTarget.Render(drawingVisual);
PngBitmapEncoder pngEncoder = new PngBitmapEncoder();
pngEncoder.Frames.Add(BitmapFrame.Create(renderTarget));
Byte[] _imageArray;
using (MemoryStream outputStream = new MemoryStream())
{
pngEncoder.Save(outputStream);
_imageArray = outputStream.ToArray();
}
using (FileStream stream = new FileStream(@"c:\test.png", FileMode.Create, FileAccess.ReadWrite))
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
writer.Write(_imageArray);
}
}
return _imageArray;
}
InformationsquelleAutor Tsukasa | 2013-12-02