wpf에서 이미지를 플립하는 방법
최근에 'Transformed Bitmap' 및 'RotateTransformed' 클래스를 사용하여 비트맵 이미지를 회전하는 방법을 배웠습니다.이제 이미지를 시계 방향으로 회전할 수 있습니다.이미지를 뒤집으려면 어떻게 해야 하나요?비트맵 이미지의 수평 및 수직 플립을 수행할 클래스를 찾을 수 없습니다.제가 어떻게 하는지 알아내는 것을 도와주세요.예를 들어, 내 이미지가 'd'처럼 보이는 그림이라면, 수직 뒤집기는 'q'처럼 되고 수평 뒤집기는 'b'처럼 됩니다.
수평의 경우 스케일 X가 -1이고 수직 플립의 경우 스케일 Y가 -1인 ScaleTransform을 이미지에 적용합니다.RenderTransform
소유물.사용.RenderTransformOrigin="0.5,0.5"
이미지에서는 이미지가 중앙에서 뒤집히므로 Translate Transform을 추가로 적용할 필요가 없습니다.
<Image Source="a.jpg" Padding="5" RenderTransformOrigin="0.5,0.5">
<Image.RenderTransform>
<ScaleTransform ScaleX="-1"/>
</Image.RenderTransform>
</Image>
수평 플립과
<Image Source="a.jpg" Padding="5" RenderTransformOrigin="0.5,0.5">
<Image.RenderTransform>
<ScaleTransform ScaleY="-1"/>
</Image.RenderTransform>
</Image>
세로 방향입니다.
code-behind 로 실행하는 경우는, C# 로 다음과 같이 됩니다.
img.RenderTransformOrigin = new Point(0.5,0.5);
ScaleTransform flipTrans = new ScaleTransform();
flipTrans.ScaleX = -1;
//flipTrans.ScaleY = -1;
img.RenderTransform = flipTrans;
실제 플립처럼 보이도록 플립을 좀 더 "깊이" 하려면 작은 크기의 변환을 사용하여 스큐 변환을 수행하는 것이 좋습니다.
물체를 약 20도 기울여서 마치 3D로 뒤집는 것처럼 보이게 할 수 있습니다.이것은 불쌍한 남자의 3D 플립입니다.WPF에서는 진정한 3D 플립을 실현할 수 있지만, 그러기 위해서는 좀 더 많은 작업이 필요합니다.
이렇게 하면 보다 깨끗한 애니메이션을 얻을 수 있으며, 두 개의 다른 패널에서 가시성을 전환하여 요소에 전면과 후면의 느낌을 줄 수 있습니다.
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="MyControl" Storyboard.TargetProperty="(FrameworkElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
<SplineDoubleKeyFrame KeyTime="00:00:00.0" Value="1" />
<SplineDoubleKeyFrame KeyTime="00:00:00.09" Value="0.3" />
<SplineDoubleKeyFrame KeyTime="00:00:00.12" Value="0.6" />
<SplineDoubleKeyFrame KeyTime="00:00:00.15" Value="0.8" />
<SplineDoubleKeyFrame KeyTime="00:00:00.18" Value="1" />
<SplineDoubleKeyFrame KeyTime="00:00:00.2" Value="1" />
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="MyControl" Storyboard.TargetProperty="(FrameworkElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)">
<SplineDoubleKeyFrame KeyTime="00:00:00.0" Value="1" />
<SplineDoubleKeyFrame KeyTime="00:00:00.09" Value="0.9" />
<SplineDoubleKeyFrame KeyTime="00:00:00.18" Value="1" />
<SplineDoubleKeyFrame KeyTime="00:00:00.2" Value="1" />
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="MyControl" Storyboard.TargetProperty="(FrameworkElement.RenderTransform).(TransformGroup.Children)[1].(SkewTransform.AngleY)">
<SplineDoubleKeyFrame KeyTime="00:00:00" Value="0" />
<SplineDoubleKeyFrame KeyTime="00:00:00.06" Value="-10" />
<SplineDoubleKeyFrame KeyTime="00:00:00.09" Value="-20" />
<SplineDoubleKeyFrame KeyTime="00:00:00.1" Value="20" />
<SplineDoubleKeyFrame KeyTime="00:00:00.18" Value="0" />
</DoubleAnimationUsingKeyFrames>
<Image x:Name="SampleImage" Margin="0" RenderTransformOrigin="0.5,0.5" >
<Image.LayoutTransform>
<TransformGroup>
<ScaleTransform ScaleY="1" ScaleX="-1"/>
<SkewTransform AngleY="0" AngleX="0"/>
<RotateTransform Angle="0"/>
<TranslateTransform/>
</TransformGroup>
</Image.LayoutTransform>
</Image>
이와 같은 이미지 구성 요소를 만듭니다.그리고 소스가 설정되면 이미지가 왼쪽에서 오른쪽으로 뒤집힙니다.
수평(전용) 플립 btw의 빠른 트릭은 FlowDirection 속성을 FlowDirection으로 설정하는 것입니다.오른쪽에서 왼쪽으로그러나 구성 요소가 컨테이너인 경우 구성 요소의 일부 하위 항목이 속성을 다르게 해석할 수 있습니다(커스텀 논리).
흥미로운 3D 플립 가능 사용자 컨트롤: http://flipcontrol.codeplex.com/releases/view/22358
이 경우 양쪽에 동일한 이미지를 표시해야 합니다.
음수와 함께 ScaleTransform을 사용할 수 있습니다.ScaleX
/ScaleY
:
<TextBlock Text="P">
<TextBlock.RenderTransform>
<ScaleTransform ScaleY="-1" ScaleX="-1" />
</TextBlock.RenderTransform>
</TextBlock>
언급URL : https://stackoverflow.com/questions/3005219/how-to-flip-image-in-wpf
'programing' 카테고리의 다른 글
디스크에서 이미 삭제된 여러 파일을 Git repo에서 제거 (0) | 2023.04.19 |
---|---|
콘솔 앱으로 표시할 것인지 윈도우 앱으로 표시할 것인지를 스스로 결정하는 C# 앱을 만들려면 어떻게 해야 합니까? (0) | 2023.04.19 |
tar, gz, zip 또는 bzip2를 사용하여 파일 분할 (0) | 2023.04.19 |
WPF 개체를 복제하려면 어떻게 해야 합니까? (0) | 2023.04.19 |
SQL Server에서 PAGEIOLACH_SH 대기 유형은 무엇입니까? (0) | 2023.04.19 |