WPF : 이미지를 원래 크기로 표시하는 방법은 무엇입니까?


98

WPF에서 이미지를 표시하는 데 문제가 있습니다.

내 코드는 다음과 같습니다.

<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>

원본 크기가 32 * 32 인 이미지가 있지만 위 코드를 실행하면 이미지가 원래 크기를 넘어서 모든 공간을 채우도록 늘어납니다. 또한 "Stretch"속성을 "None"으로 설정했지만 작동하지 않는 것 같습니다.

그렇다면이 문제를 어떻게 해결할 수 있습니까? 감사합니다!

답변:


127

여기 비슷한 질문입니다. 일반적으로 설정 Stretch="None"으로 충분합니다.

또한 DPI가 메타 데이터에 설정된 이미지를 갖는 것도 매우 중요합니다. 이미지의 DPI가 모니터의 DPI (일반적으로 96)와 다른 경우 WPF가 DPI에 독립적이 되려고하므로 이미지의 크기를 자동으로 조정 한다는 사실을 알아 내기까지 꽤 오랜 시간이 걸렸습니다. .


편집하다

MSDN 링크가 끊어졌습니다. 여기에 새 링크가 있습니다. MSDN Blog-Blurry Bitmaps . 새 링크가 작동을 멈춘 경우를 대비하여 이전 링크를 archive.org에 사용하도록 유지합시다.


10
DPI 설정에 관한 훌륭한 팁, Paja. 내 도구 모음 아이콘 중 일부는 72 DPI로 설정되어 픽셀 크기가 16x16 인 경우에도 더 크게 나타납니다.
dthrasher 2011 년

이해가 안 돼요. WPF가 화면 해상도에 따라 창을 다르게 배치한다는 말입니까? 좋은 일이 될 수있는 방법은 없습니다.
Kyle Delaney

@KyleDelaney 내가 답변에 링크 한 기사를 읽었습니까?
Paya

1
@KyleDelaney 예, 그렇기 때문에 WPF에서 크기, 거리, 여백 등을 지정하기 위해 "픽셀"대신 "점"을 사용합니다.
Paya

1
@ PawełAudionysos 깨진 링크를 수정했습니다
Paya

7
<Image Source="Images/Background.png" UseLayoutRounding="True" SnapsToDevicePixels="True" Width="600" Height="800" Stretch="Fill" />

이 사람이 가진 이미지를, 나를 위해 작동 600x800 pixels하고96dpi .

@ rishad2m8 크기를 알 수없는 경우 https://msdn.microsoft.com/en-us/library/system.drawing.image.size(v=vs.110).aspx로 크기를 먼저 감지 할 수 있습니다 .


1
이미지 크기를 알 수없는 경우 어떻게합니까?
rishad2m8 2016

당신은 구세주입니다. 내가이 문제에 대해 얼마나 오래 고민했는지 알고 싶지 않을 것입니다.
David Atkinson

1
UseLayoutRounding을 true로 설정하면 저에게 효과적이었습니다! 감사!
Blake Thingstad

6

너비 나 높이를 지정하지 말고 대신 다음과 같이 사용하십시오.

<Image Source="/images/user_add.png" Stretch="None" HorizontalAlignment="Center" VerticalAlignment="Center" />

4

Paya의 답변에 추가 : WPF모니터 해상도에 적응하려는 시도 를 보상 하려면 WidthHeight을 파일의 원래 크기로 설정하고 Stretch="Fill". 이것은 나를 위해 일했습니다.


0

이미지를 원래 크기로 표시하고 싶지만 이미지 크기를 모르는 경우 가장 좋은 방법은 이미지를 UIElement의 배경으로 설정하는 것입니다. 이렇게 :

    <Button>
        <Button.Background>
            <ImageBrush ImageSource="/images/user_add.png" Stretch="None"/>
        </Button.Background>
    </Button>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.