Laden...

Screenshot erstellen

Erstellt von Taladan vor 15 Jahren Letzter Beitrag vor 15 Jahren 4.229 Views
Taladan Themenstarter:in
582 Beiträge seit 2008
vor 15 Jahren
Screenshot erstellen

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

F
722 Beiträge seit 2005
vor 15 Jahren

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.

Taladan Themenstarter:in
582 Beiträge seit 2008
vor 15 Jahren

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

F
722 Beiträge seit 2005
vor 15 Jahren

Achso, ja das ist in WPF einfach. Schau dir z.b. mal die Klasse RenderTargetBitmap an.

Taladan Themenstarter:in
582 Beiträge seit 2008
vor 15 Jahren

Das habe ich schon häufiger gelesen. Aber irgendwie stehe ich bei dem Ding wie ein Ochs vorm Berg.

Gruß dat Tala

F
722 Beiträge seit 2005
vor 15 Jahren

warum, dazu gibt es doch massig codebeispiele im netz.

Taladan Themenstarter:in
582 Beiträge seit 2008
vor 15 Jahren

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

F
722 Beiträge seit 2005
vor 15 Jahren

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.

Taladan Themenstarter:in
582 Beiträge seit 2008
vor 15 Jahren

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

F
722 Beiträge seit 2005
vor 15 Jahren

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?

Taladan Themenstarter:in
582 Beiträge seit 2008
vor 15 Jahren

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