I have canvas with child images. Here is my XAML:
<Canvas x:Name="ImageArea" ClipToBounds="True">
<Image x:Name="BigImage" RenderTransformOrigin="0.5,0.5">
<Image.RenderTransform>
<TransformGroup>
<RotateTransform x:Name="ImageRotateTransform" Angle="0"/>
<ScaleTransform x:Name="ImageScaleTransform" ScaleX="1" ScaleY="1"/>
<TranslateTransform x:Name="ImageTranslateTransform" X="0" Y="0"/>
</TransformGroup>
</Image.RenderTransform>
</Image>
</Canvas>
I want to fit this image in canvas with this code:
var fitSize = Math.Max(BigImage.ActualHeight, BigImage.ActualWidth);
var targetSize = Math.Min(ImageArea.ActualHeight, ImageArea.ActualWidth);
var ratio = targetSize / fitSize;
ImageScaleTransform.ScaleX = ImageScaleTransform.ScaleY = ratio;
ImageTranslateTransform.X =
fitSize == BigImage.ActualWidth ?
0 : ImageArea.ActualWidth / 2 - BigImage.ActualWidth*ratio / 2;
ImageTranslateTransform.Y =
fitSize == BigImage.ActualHeight ?
0 : ImageArea.ActualHeight / 2 - BigImage.ActualHeight * ratio / 2;
This code computes scale ratio, then tries to center image depending of it size.
The problem is that X and Y coordinates of translate transform are computed right but image not positioned as expected (only small part of image visible in bottom down of the canvas). If set RenderTransformOrigin to 0,0 image positioned normal.
Where am I mistaken?
