WPF display embedded resources images

ale 0 Puntos de reputación
2023-12-22T12:55:49.35+00:00

Dear Sir.

I'm trying to display an embedded PNG image, returned as System.Drawing.Bitmap.

xmlns:res="clr-namespace:GUI.Resources.Localization;assembly=GUI.Resources"

<Image Source="{Binding Source={x:Static res:MyGlobalResources.TestImage}}"/>

The only way is converting convert Bitmap to BitmapSource?

Thanks in advance, best regards

Preguntas y respuestas (Q&A) de Microsoft
Preguntas y respuestas (Q&A) de Microsoft
Use esta etiqueta para compartir sugerencias, solicitudes de características y errores con el equipo de Microsoft Q&A. El equipo de Microsoft Q&A evaluará sus comentarios periódicamente y proporcionará actualizaciones a lo largo del proceso.
207 preguntas
0 comentarios No hay comentarios
{count} votos

1 respuesta

Ordenar por: Muy útil
  1. Carlos Solís Salazar 17.186 Puntos de reputación MVP
    2023-12-22T22:44:18.7666667+00:00

    Estimado usuario,

    Para mostrar una imagen System.Drawing.Bitmap en WPF, que normalmente utiliza el tipo BitmapSource para imágenes, efectivamente necesitas convertir el Bitmap en BitmapSource. Esta conversión es necesaria porque WPF y Windows Forms utilizan sistemas de imágenes diferentes.

    Aquí tienes un método simple para convertir un System.Drawing.Bitmap a un BitmapSource que se puede usar en WPF:

    1. Añadir una Referencia a System.Drawing: Asegúrate de que tu proyecto tenga una referencia a System.Drawing.
    2. Usar el Método Imaging.CreateBitmapSourceFromHBitmap: Este método es proporcionado por WPF y puede crear un BitmapSource a partir de un handle de bitmap GDI.

    Aquí tienes un ejemplo de cómo realizar la conversión:

    using System;
    using System.Drawing; // Asegúrate de incluir esto
    using System.Windows;
    using System.Windows.Interop;
    using System.Windows.Media.Imaging;
    
    public static BitmapSource ConvertirBitmapABitmapSource(Bitmap bitmap)
    {
        var hBitmap = bitmap.GetHbitmap();
        BitmapSource bitmapSource;
    
        try
        {
            bitmapSource = Imaging.CreateBitmapSourceFromHBitmap(
                hBitmap,
                IntPtr.Zero,
                Int32Rect.Empty,
                BitmapSizeOptions.FromEmptyOptions());
        }
        finally
        {
            // Limpiar el handle del bitmap GDI
            DeleteObject(hBitmap);
        }
    
        return bitmapSource;
    }
    
    [System.Runtime.InteropServices.DllImport("gdi32.dll")]
    public static extern bool DeleteObject(IntPtr hObject);
    

    Luego puedes enlazar este BitmapSource a tu control de imagen en WPF.

    Respecto a tu código XAML, necesitarás asegurarte de que la propiedad MyGlobalResources.TestImage devuelva un BitmapSource y no un System.Drawing.Bitmap. Si TestImage es un Bitmap, deberías convertirlo usando el método anterior y proporcionarlo como un BitmapSource.

    Espero que esto te ayude a mostrar tu imagen en WPF. Si tienes más preguntas o necesitas más asistencia, no dudes en preguntar. Saludos cordiales.

    0 comentarios No hay comentarios