Ich habe ein Problem mit Bild beschneiden. Wenn ich versuche, ein Bild mit einem Rechteck zu beschneiden, wird der Zuschneidebereich auf einen seltsamen Wert eingestellt. Hier ist XAML-Code:WPF Image Cropping
<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>
und hier, wie ich Ernte Bild:
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;
}
Weiß jemand, wie man das Problem lösen?
Here how it looks before cropping
Ohne eine gute [MCVE], die zuverlässig reproduziert Ihr Problem, ist es unmöglich zu wissen, welche Antwort Sie benötigen. Höchstwahrscheinlich sollten Sie überhaupt keine neue Bitmap erstellen und stattdessen sollten Sie sich auf die Transformationsoptionen für das Image-Element verlassen, um einfach festzulegen, wie die ursprüngliche Bitmap auf dem Bildschirm dargestellt wird. Bitte stellen Sie eine gute MCVE zur Verfügung und erklären Sie _precely_, was dieser Code jetzt tut und was er stattdessen tun soll. –