WPF: ¿Cómo mostrar una imagen en su tamaño original?


Tengo un problema con la visualización de imágenes en WPF.

Aquí está mi código:

<Button HorizontalAlignment="Left" Grid.Column="1" Grid.Row="5" Margin="0,5">
        <Button.Content>
            <StackPanel Orientation="Horizontal" Margin="10,0">
                <Image Source="/images/user_add.png" Stretch="None" HorizontalAlignment="Center" VerticalAlignment="Center" Width="24" Height="24" />
                <TextBlock Text="添加" />
            </StackPanel>
        </Button.Content>
    </Button>

Tengo una imagen con el tamaño original 32*32, pero cuando ejecuté el código anterior, la imagen se estirará para llenar todo el espacio, más allá de su tamaño original. También establecí la propiedad " Stretch "en" None", pero parece que no funciona.

Entonces, ¿cómo puedo solucionar este problema? ¡Gracias!

Author: dthrasher, 2010-06-16

4 answers

Aquí es una pregunta similar. Generalmente, establecer Stretch="None" es suficiente.

También es muy importante lo que DPI tiene la imagen establecida en metadatos. Me tomó bastante tiempo descubrir que si el DPI de la imagen es diferente del DPI del monitor (generalmente 96), WPF redimensionará automáticamente la imagen, ya que intenta ser independiente del DPI.

 117
Author: Paya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:17:55

Intenta no especificar ancho o alto, úsalo así:

<Image Source="/images/user_add.png" Stretch="None" HorizontalAlignment="Center" VerticalAlignment="Center" />
 6
Author: VoodooChild,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-16 17:18:24
<Image Source="Images/Background.png" UseLayoutRounding="True" SnapsToDevicePixels="True" Width="600" Height="800" Stretch="Fill" />

Esto funciona para mí, para una imagen con 600x800 pixels y 96dpi.

@rishad2m8 Si se desconoce el tamaño, se puede detectar primero el tamaño con https://msdn.microsoft.com/en-us/library/system.drawing.image.size (v=vs.110). aspx Supongo.

 6
Author: Ulrich-Lorenz Schlüter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-29 10:39:51

Añadiendo a la respuesta de Paya: para compensar el intento de WPF de adaptarse a la resolución de los monitores, debería ser capaz de establecer Width y Height a las dimensiones originales del archivo y usar Stretch="Fill". Esto funcionó para mí.

 3
Author: sorrymissjackson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-04 09:37:27