Creare un PngBitmapEncoder a partire da un FrameworkElement

Scritto da  Massimo Bonanni il venerdì 23 settembre 2011  •  Linguaggio: VB   • Livello: 100


La seguente funzione consente di creare un oggetto PngBitmapEncoder (con il quale è possibile generare, ad esempio, una bitmap su disco) a partire da un Framework Element della nostra interfaccia.

VB.NET

Public Shared Function GetImageEncoderFromControl(ByVal controlToConvert As FrameworkElement,
                                                  ByVal pixelFormat As System.Windows.Media.PixelFormat,
                                                  Optional ByVal xDpi As Double = 96D,
                                                  Optional ByVal yDpi As Double = 96D) As PngBitmapEncoder
    Dim imageEncoder As PngBitmapEncoder = Nothing
    Try
        Dim transform = controlToConvert.LayoutTransform
 
        Dim sizeOfControl = New Windows.Size(CInt(controlToConvert.ActualWidth),
                                             CInt(controlToConvert.ActualHeight))
        controlToConvert.Measure(sizeOfControl)
        controlToConvert.Arrange(New Rect(sizeOfControl))
        Dim videoxDpi, videoyDpi As Double
        GetVideoResulution(videoxDpi, videoyDpi)
        Dim renderBitmap = New RenderTargetBitmap(CInt(sizeOfControl.Width * xDpi / videoxDpi),
                                                  CInt(sizeOfControl.Height * yDpi / videoyDpi),
                                                  xDpi,
                                                  yDpi,
                                                  pixelFormat)
        renderBitmap.Render(controlToConvert)
 
        Dim pngEncoder = New PngBitmapEncoder()
        pngEncoder.Frames.Add(BitmapFrame.Create(renderBitmap))
        imageEncoder = pngEncoder
    Catch ex As Exception
        imageEncoder = Nothing
    End Try
    Return imageEncoder
End Function

 

 Per ottenere l'oggetto Bitmap è sufficiente recuperare la proprietà Frame(0) dell'oggetto restituito.


Tags: 

 
x