Hallo,
wie kann man mit WPF (also NICHT Windows Forms) ein Screenshot erstellen.
Ich finde im Netz nur Beispiele für WindowsForms (auf Basis der Klasse Bitmap).
Gruß dat Tala
wenn du einen screenshot vom ganzen bildschirm machen willst, bleibt dir nur der weg über die windows API, bzw. über die Klassen in System.Drawing.
Eigendlich geht es darum, den Content bereich eines Controls zu kopieren. Muß ich da auch Drawing nehmen. Vor allem, wie stelle ich bei WPF Controls die obere Linke Spitze des Controls fest?
Gruß dat Tala
Achso, ja das ist in WPF einfach. Schau dir z.b. mal die Klasse RenderTargetBitmap an.
Das habe ich schon häufiger gelesen. Aber irgendwie stehe ich bei dem Ding wie ein Ochs vorm Berg.
Gruß dat Tala
warum, dazu gibt es doch massig codebeispiele im netz.
Der Renderer erwatet ein Visual objekt. Aber wie kann ich nun aus einen Control.Content ein Visual-Objekt machen? Beispielweise aus einen Frame oder einer RichTextBox?
Gruß dat Tala
indem du nach Visual castest. z.b.
Visual v = Frame.Content as Visual;
if(v != null)
{
// v ist Visual...
}
Sorry, aber das sind Grundlagen, die du dir selbst aneignen musst.
Ich hab es jetzt so Probiert,
private RenderTargetBitmap CaptureScreen(FrameworkElement controlToRender)
{
RenderTargetBitmap bmp = new RenderTargetBitmap(controlToRender.Width, controlToRender.Height, 200, 200, PixelFormats.Rgb24);
bmp.Render((Visual)controlToRender);
return bmp;
}
Aber es wird nichts angezeigt. wo liegt der Fehler?
Gruß dat Tala
das kann man auf grundlage des von dir geposteten codes nicht sagen. du musst controlToRender nicht zu Visual casten, weil FrameworkElement von Visual erbt.
was machst du mit dem rückgabewert?
Du warst eben schneller. Diese Grundzüge kenne ich, aber da nichts raus kommt, gehe ich davon aus das es falsch ist.
private void _Text_Click(object sender, RoutedEventArgs e)
{
_Image.Source = CaptureControl((Visual)_frame.Content);
}
private RenderTargetBitmap CaptureControl(Visual controlToRender)
{
RenderTargetBitmap bmp = new RenderTargetBitmap(100, 100, 200, 200, PixelFormats.Pbgra32);
bmp.Render(controlToRender);
return bmp;
}
Selbstredent hat mein _frame bereits eine Seite angesteuert. und diese Seite soll halt in ein Bitmap verwandelt werden.
Nur leider scheint mein _Image scheinbar das zurückgelieferte bmp nicht zu verkraften.
Gruß dat Tala