source

WPF의 이미지가 흐려짐

ittop 2023. 5. 7. 11:50
반응형

WPF의 이미지가 흐려짐

저는 C#을 사용하여 WPF에서 애플리케이션을 개발하고 있습니다.이미지를 랩 패널에 넣고 테두리가 하나 더 있는 그리드 안에 표시하고 버튼에도 이미지를 사용합니다.이미지 컨트롤의 품질이 떨어지는 것이 문제입니다.저는 여기에 제 이미지를 올릴 수 없기 때문에 여기서 간단히 설명하겠습니다.

저는 용한사를 요.SnapsToDevicePixels="True"이미지들을 위해 그러나 여전히 흐릿하게 보입니다.

업데이트됨:

를 공유했습니다.여기에 이미지 설명 입력

그에 하나의 을 더 수한 방법이라고 생각합니다.RenderOptions.EdgeMode="Aliased"각 이미지에 대해 내가 의미하는 것:

<Image Source="/LoginPanel;component/Icons/icoLogin.ico"
       RenderOptions.BitmapScalingMode="NearestNeighbor"
       RenderOptions.EdgeMode="Aliased"/>

만약 당신이 여전히 당신의 문제를 고칠 수 없다면, 당신은 이 http://blogs.msdn.com/b/dwayneneed/archive/2007/10/05/blurry-bitmaps.aspx 을 참조하여 사용자 정의 비트맵 클래스를 만들고 당신에게 문제를 일으키는 모든 이미지에 적용할 수 있습니다.

이 스택 오버플로 질문도 볼 수 있습니다.

SnapsToDevicePixels가 비트맵에서 작동하지 않는 것 같습니다.

NearestNeighbor 옵션은 실제로 비트맵을 변환하며 다른 비트맵을 원래 비트맵으로 변환합니다.

WPF 4에서는 이 문제를 해결하기 위해 Framework Element의 "Use Layout Rounding" 속성이 도입되었습니다.

루트 요소에서 이 속성을 True로 설정하면 Windows(윈도우)와 같은 하위 요소가 픽셀 가장자리에 정렬됩니다.

<Window UseLayoutRounding="True">...</Window>

이것은 나에게 효과가 있습니다.

<Image Source="/LoginPanel;component/Icons/icoLogin.ico"
       RenderOptions.BitmapScalingMode="NearestNeighbor"</Image>

렌더 옵션을 설정합니다.각 이미지에 대해 비트맵 스케일링 모드="인접"입니다.또는 StackOverflow에서 이 질문을 참조하십시오.


제 .

<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="661">
    <WrapPanel>
        <Button VerticalAlignment="Center">
            <Image Source="/WpfApplication1;component/icoChip32x32.ico"
               RenderOptions.BitmapScalingMode="NearestNeighbor" Stretch="None"></Image>
        </Button>
        <Button VerticalAlignment="Center">
            <Image Source="/WpfApplication1;component/icoChip32x32.ico"
                   RenderOptions.BitmapScalingMode="NearestNeighbor" Stretch="None"></Image>
        </Button>

        <Button VerticalAlignment="Center">
            <Image Source="/WpfApplication1;component/Presentation-Edit.png"
               RenderOptions.BitmapScalingMode="NearestNeighbor" Stretch="None"></Image>
        </Button>
        <Button VerticalAlignment="Center">
            <Image Source="/WpfApplication1;component/Presentation-Edit.png"
                   RenderOptions.BitmapScalingMode="NearestNeighbor" Stretch="None"></Image>
        </Button>
    </WrapPanel>
</Window>

그리고 제 결과는 이렇습니다.
...그리고 이것이 제 결과입니다.

반올림= 배치 사용"이미지가 콘텐츠로 사용되는 경우 부모 요소에 True" 속성이 있습니다.당신의 경우에는 버튼입니다.

스케일링으로 인한 이미지 배경과 함께 흐릿한 문제에 부딪혔는데, 솔루션은 생각보다 훨씬 간단했습니다.처음에는 텍스처 크기의 2배로 확장되는지 궁금했지만, 실제로 확장은 시스템 DPI(96): 이미지 DPI(72, 많은 편집자의 기본값)의 비율과 일치했습니다.이미지를 96DPI로 조정하면 기본 Windows 설정으로 픽셀 단위로 완벽하게 표시됩니다.

편집: 세부 대비가 높은 이미지를 시도했고 약간 부드러워졌습니다.

WPF는 크기 및 위치 지정을 위해 구체적인 픽셀 값을 사용하지 않으므로 DPI와 함께 잘 확장할 수 있습니다.

이로 인해 개별 화면 픽셀과 일치하지 않는 위치를 사용하려고 하는 문제가 발생할 수 있습니다. 일부 이미지 픽셀은 흐릿하게 보이는 여러 화면 픽셀을 통해 렌더링됩니다.

UseLayoutRendering=true with SnapToDevicePixels=false를 사용하면 이 문제가 해결됩니다.계산이 영상 수준까지 계단식으로 내려오도록 기본 창 수준에서도 설정해야 합니다.

창 하나와 이미지가 있는 간단한 WPF 응용 프로그램을 만들어 사용해 볼 수 있습니다.이미지 여백을 (10.452, 0.736, 0, 0)과 같이 어리석은 것으로 설정하면 흐리게 됩니다.이는 이미지에서 UseLayoutRendering=true와 함께 사라집니다.

그런 다음 구성 요소 초기화() 후 창 생성자에서 여백을 다시 설정하면 이미지에서 UseLayoutRendering=true를 설정했는지 여부에 관계없이 흐립니다. 화상을 화면 픽셀과 정렬하기 위한 계산이 먼저 수행된 다음 이미지를 일치하지 않는 위치로 이동했기 때문입니다.

UseLayoutRendering과 SnapToDevicePixels의 차이점이 무엇인지 완전히 확신할 수는 없습니다. 계산이 이루어질 때라고 생각합니다.이미지에는 레이아웃 렌더링 사용이 선호되는 것 같습니다.

이미지를 원래 크기에서 늘리거나 축소하면 흐림 문제가 발생할 수도 있습니다.

저도 같은 문제가 있었지만, 저의 경우 아이콘을 다운로드하여 확인한 결과 모두 DPI가 잘못되었다는 것을 알게 되었습니다.110,56,116,xx,95,99 등등...

DPI를 모두 96으로 변경했을 때 모든 것이 정상이었습니다!

언급URL : https://stackoverflow.com/questions/5645274/image-in-wpf-getting-blurry

반응형