2015-01-31 4 views
3

성능을 저하시키지 않으면 서 (MVVM을 사용하여) WPF에서 이미지의 색조/색을 어떻게 잡을 수 있습니까? 코드에서 비트 맵을 수정하면 많은 이미지가 변경되어 성능이 저하되므로 순수한 XAML 솔루션이 적합합니다. 이미지는 단순한 모양 이상으로 구성되어 있으므로 경로를 사용할 수 없습니다.WPF에서 부분적으로 투명한 이미지에 색을 더하기

답변

5

WinForms/GDI +와 달리 WPF는 렌더링되는 이미지를 색칠하거나 색조를 지정하는 쉬운 방법이없는 것처럼 보입니다. 이를 달성하기위한 두 가지 아이디어는 쉐이더를 사용하거나 이미지 위에 컬러 사각형을 오버레이하는 것입니다.

나는 직사각형 경로를 시도하기로 결심했다. 기본적으로 이미지 위에 색상이 지정된 사각형을 겹쳐서 지정하고 OpacityMask을 사용하여 색상 채우기를 특정 영역으로 제한하면됩니다. OpacityMask는 주로 경로와 함께 사용되지만 ImageBrush을 비롯한 모든 종류의 브러시를 사용할 수 있습니다. 즉, 이미지를 채색 색상의 "스텐실"로 사용할 수 있습니다.

예 :는 오버레이 & 전에

(사용자가 할 수있는 "하이라이트"지도의 한 부분이, 실제 이미지가 this처럼 보이는 내 응용 프로그램에서 촬영) 마스크

http://i.imgur.com/rdI7LGq.png

오버레이 후 & 마스크

http://i.imgur.com/WkJdmvG.png

다음은이에 필요한 XAML의 모든입니다 : 내가하는 ColorToBrushConverter를 사용 했으로

<Image 
    Source="{Binding MyImage}" 
    Width="150" 
    Height="150" /> 
<Rectangle Width="150" Height="150"> 
    <Rectangle.Fill> 
     <SolidColorBrush Color="{Binding Color}"/> 
    </Rectangle.Fill> 
    <Rectangle.OpacityMask> 
     <ImageBrush ImageSource="{Binding MyImage}"/> 
    </Rectangle.OpacityMask> 
</Rectangle> 

는 브러시에 색을 결합하기.

+0

XAML에서 SolidColorBrush 인스턴스를 만들고 '과 같은 Color 속성을 바인딩하여 ColorToBrushConverter를 저장할 수 있습니다. – Clemens

+0

@ 클레멘스, 나는 그것을 몰랐다, 고마워! – Cyral

관련 문제