У меня проблема с обрезкой изображения. Когда я пытаюсь обрезать изображение с помощью прямоугольника, область обрезки задается некоторым странным значением. Вот XAML код: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>
и вот как я обрезать изображение:
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;
}
Кто-нибудь знает, как исправить это?
Here how it looks before cropping
Без хорошей [mcve], которая надежно воспроизводит вашу проблему, невозможно точно знать, какой ответ вам нужен. Скорее всего, вам не следует создавать новое растровое изображение вообще, и вместо этого следует полагаться на опции преобразования для элемента «Image», чтобы просто ограничить, как оригинальная растровая карта отображается на экране. Пожалуйста, предоставьте хороший MCVE и объясните _precisely_, что этот код делает сейчас и что вы хотите, чтобы он делал вместо этого. –