Я хочу реализовать ротацию изображения в памяти (предполагается, что уже я считаю это нагруженным)
private void btnRotacion90_Click(object sender, RoutedEventArgs e)
{
var bi = ImgFotoUsuario.Source as BitmapImage;
bi.BeginInit();
bi.Rotation = Rotation.Rotate90;
bi.EndInit();
ImgFotoUsuario.Source = bi;
}
Однако я это старался делать различного формы включая следующие линии кода
bi.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
bi.CacheOption = BitmapCacheOption.OnLoad;
Кроме того, что они стараться обращать изображение в другой тип (как stream или байт), чтобы так после снова это превращать в ImgMapImage, но даже не, как делание этого
То, что ты просишь, очень простое, и estГЎs совсем рядом с настоящим ответом, BitmapImage
лучше перемещать это ImageBrush
, чтобы это показывать на экране, но тебе harГ© полный пример, acГЎ я буду загружать фотографию и ее pondrГ© как фон в одном Rectangle
называя rt_foto :
, Чтобы загружать изображение:
private void CargarButtonClick(object sender, RoutedEventArgs e)
{
OpenFileDialog _dialog = new OpenFileDialog();
string filtro = "Archivo (*.png)|*.png";
_dialog.Filter = filtro;
_dialog.Multiselect = false;
if (_dialog.ShowDialog() == true)
{
rt_foto.Fill = ToImageBrush(_dialog.FileName);
}
}
ты Будешь нуждаться в этом методе:
/// <summary>
/// Convierte una ruta en disco a ImageBrush
/// </summary>
/// <param name="path">Ruta del archivo</param>
/// <returns>ImageBrush</returns>
public static ImageBrush ToImageBrush(this string path)
{
System.Windows.Controls.Image image = new System.Windows.Controls.Image();
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.UriSource = new Uri(path);
bitmapImage.EndInit();
image.Source = (ImageSource)bitmapImage;
return new ImageBrush()
{
ImageSource = (ImageSource)bitmapImage
};
}
ты Можешь использовать это формы не estГЎtica доставая static
и this
имени mГ©todo. И в конце концов чтобы крутить изображение, что estГЎs используя:
private void RotarButtonClick(object sender, RoutedEventArgs e)
{
RotateTransform aRotateTransform = new RotateTransform();
aRotateTransform.CenterX = 0.5;
aRotateTransform.CenterY = 0.5;
aRotateTransform.Angle = 90;
rt_foto.Fill.RelativeTransform = aRotateTransform;
}
Необязательно ты можешь refactorizar Гєltimo mГ©todo для того, чтобы он стоил тебе для того, чтобы покрутить другие imГЎgenes и не только та Rectangle
, или tambiГ©n вместо того, чтобы помещать ему, что я покрутил 90 градусов, ты можешь перемещать это из-за parГЎmetro для того, чтобы он покрутил в других ГЎngulos, quedarГ - во что-то asГ-:
private void RotarButtonClick(object sender, RoutedEventArgs e)
{
Rotar(rt_foto, 90);
}
private void Rotar(Rectangle rect, double angle)
{
RotateTransform aRotateTransform = new RotateTransform();
aRotateTransform.CenterX = 0.5;
aRotateTransform.CenterY = 0.5;
aRotateTransform.Angle = angle;
rect.Fill.RelativeTransform = aRotateTransform;
}
Надеялся, что он подает тебя, я не использую никогда контроля Image
, потому что он очень problemГЎtico, предпочитаю Rectangle
., но это уже вещь каждого.
Приветствие.
Добавил:
, Чтобы это использовать в Image вместо Rectangle, контроль llamarГЎ img_foto
, Чтобы загружать фотографию:
private void Button_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog _dialog = new OpenFileDialog();
string filtro = "Archivo (*.png)|*.png";
_dialog.Filter = filtro;
_dialog.Multiselect = false;
if (_dialog.ShowDialog() == true)
{
img_foto.Source = ToImageSource(_dialog.FileName);
}
}
public System.Windows.Media.Imaging.BitmapImage ToImageSource(string path)
{
System.Windows.Media.Imaging.BitmapImage _bitmap = new System.Windows.Media.Imaging.BitmapImage();
_bitmap.BeginInit();
_bitmap.UriSource = new Uri(path);
_bitmap.EndInit();
return _bitmap;
}
И чтобы крутить этот сноп mГ©todo и ты посылаешь ему контроль из-за parГЎmetro:
private void RotarImagen(Image control, Rotation value)
{
var biOriginal = (BitmapImage)control.Source;
var biRotated = new BitmapImage();
biRotated.BeginInit();
biRotated.UriSource = biOriginal.UriSource;
biRotated.Rotation = value;
biRotated.EndInit();
control.Source = biRotated;
}
Надеялся, что он сейчас подает тебя. Bye!