J'ai un problème avec le recadrage d'image. Lorsque j'essaie de recadrer une image avec un rectangle, la zone de recadrage est réglée sur une valeur étrange. Voici le code XAML:Restauration d'image WPF
<Grid Name="GridImage">
<Image Name="LoadedImage" SnapsToDevicePixels="True" RenderOptions.BitmapScalingMode="HighQuality">
</Image>
<Canvas x:Name="ImageCanvas" ClipToBounds="True">
<Rectangle x:Name="SelectionRectangle" Stroke="LightBlue" Fill="#220000FF" Visibility="Collapsed" />
</Canvas>
</Grid>
et voici comment je découpez l'image:
var imagePosition = LoadedImage.TransformToAncestor(GridImage).Transform(new Point(0, 0));
Rect rect1 = new Rect(Math.Max(Canvas.GetLeft(SelectionRectangle) - imagePosition.X, 0), Math.Max(Canvas.GetTop(SelectionRectangle) - imagePosition.Y, 0), SelectionRectangle.Width, SelectionRectangle.Height);
var ratioX = LoadedImage.Source.Width/LoadedImage.ActualWidth;
var ratioY = LoadedImage.Source.Height/LoadedImage.ActualHeight;
Int32Rect rcFrom = new Int32Rect
{
X = (int)(rect1.X * ratioX),
Y = (int)(rect1.Y * ratioY),
Width = (int)(rect1.Width * ratioX),
Height = (int)(rect1.Height * ratioY)
};
try
{
BitmapSource bs = new CroppedBitmap((BitmapSource)LoadedImage.Source, rcFrom);
LoadedImage.Source = bs;
SetImageStretch(LoadedImage);
SetElementVisibility(Visibility.Hidden, Visibility.Visible, SelectionRectangle);
}
private void SetImageStretch(Image image)
{
if (image.Source.Width > image.ActualWidth || image.Source.Height > image.ActualHeight)
image.Stretch = Stretch.Uniform;
else image.Stretch = Stretch.None;
}
Quelqu'un sait comment résoudre ce problème?
Here how it looks before cropping
Sans un bon [mcve] qui reproduit fidèlement votre problème, il est impossible de savoir avec certitude quelle réponse vous avez besoin. Très probablement, vous ne devriez pas du tout créer une nouvelle image, et vous devriez plutôt vous fier aux options de transformation de l'élément 'Image' pour limiter simplement la façon dont le bitmap original est présenté à l'écran. S'il vous plaît fournissez un bon MCVE et expliquez _precisely_ ce que ce code fait maintenant et ce que vous voulez qu'il fasse à la place. –