Wpf C# Como я могу обращать изображение в BitmapImage

Я хочу реализовать ротацию изображения в памяти (предполагается, что уже я считаю это нагруженным)

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, но даже не, как делание этого

0
задан 19.03.2019, 03:49
1 ответ

То, что ты просишь, очень простое, и 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!

0
ответ дан 02.12.2019, 05:28
  • 1
    ¿ Лучше использовать Rectangle для любого типа редактирования фотографий?, потому что то, что он перемещает, состоит в том, что по крайней мере я должен делать ротацию и вырезание в моем проекте в версии 1.0 и уже у меня есть вырезание используя image и я не хочу продвинуться больше, если ниже будут осложнять я слишком много – Alerion Dnecro 20.03.2019, 01:02
  • 2
    В МОЕМ опыте, если., но conseguí добавлять mé все, чтобы использовать контроль Image вместо Rectangle, я надеюсь, что они подают тебя, так как равный я ayudó это, чтобы учиться делать сейчас, когда ты это преднатер, bye – Leodev 22.03.2019, 05:19