none
RenderTargetBitmap - Zwei Viewports in eine Bitmap rendern RRS feed

  • Frage

  • Hallo,

    ich arbeite momentan mit zwei Viewports (ein selbstständig drehendes Koordinatensystem und eine Zeichnung). Diese beiden möchte ich gern als ein einziges Bild abspeichern. Jeweils eines kann ich abspeichern, kein Problem. Doch wie füge ich zwei gerenderte Bitmaps zusammen (möglichst ohne zwischenspeichern in Dateien)?

    Gruß

    daGrossa
    Sonntag, 31. Januar 2010 14:13

Antworten

  • Ich habe das Problem jetzt selbst lösen können und, wie vorgeschlagen, ein übergeordnetes Parent (hier: ein StackPanel) gerendert.

    Dim myDockStack As New StackPanel
    myDockPanel = Me.PanelViewport
    myDockPanel.Background = Brushes.White
    
    Dim bmp As New RenderTargetBitmap(Width,Height, 96, 96, PixelFormats.Pbgra32)
    bmp.Render(myDockPanel)


    Ohne Probleme und auch das Encodieren/Speichern funktioniert:


    Dim encoder As New PngBitmapEncoder
    encoder.Frames.Add(BitmapFrame.Create(bmp))
    
    Dim Pfas As String = "C:\Temp\"
    Dim filename As String = Pfad & "Bild1.png"
    
    Dim fs As New FileStream(filename, FileMode.Create)
    
    encoder.Save(fs)
    
    fs.Close()
    Mittwoch, 3. Februar 2010 17:19

Alle Antworten

  • Hallo daGrossa,

    muss gleich gestehen mit 3D habe ich sehr wenig Erfahrung. Hast du die Möglichkeit das Bitmap von einem gemeinsamen Parent der ViewPorts rendern zu lassen? Damit würdest du dir das Zusammenfügen ersparen.
    Montag, 1. Februar 2010 09:44
  • Hallo, dankeschön erst einmal für die Antwort.

    Meinst du etwa, dass ich das vorher zu einer Art Viewport-Gruppe zusammenfassen soll? Denn als gemeinsames Parent fällt mir nichts ein, was ich rendern lassen könnte ("darüber" liegt ja eigentlich nur das Window). Ich selbst habe auch keine richtige Ahnung von 3D... vielleicht hat ja noch jemand anderes eine Idee...
    Montag, 1. Februar 2010 18:23
  • Ich habe das Problem jetzt selbst lösen können und, wie vorgeschlagen, ein übergeordnetes Parent (hier: ein StackPanel) gerendert.

    Dim myDockStack As New StackPanel
    myDockPanel = Me.PanelViewport
    myDockPanel.Background = Brushes.White
    
    Dim bmp As New RenderTargetBitmap(Width,Height, 96, 96, PixelFormats.Pbgra32)
    bmp.Render(myDockPanel)


    Ohne Probleme und auch das Encodieren/Speichern funktioniert:


    Dim encoder As New PngBitmapEncoder
    encoder.Frames.Add(BitmapFrame.Create(bmp))
    
    Dim Pfas As String = "C:\Temp\"
    Dim filename As String = Pfad & "Bild1.png"
    
    Dim fs As New FileStream(filename, FileMode.Create)
    
    encoder.Save(fs)
    
    fs.Close()
    Mittwoch, 3. Februar 2010 17:19