wpf использует bitmapimage в качестве источника для TransformedBitmap - PullRequest
0 голосов
/ 03 февраля 2019

в моем wpf я создаю imagebox с именем "image_box"

в Window_Loaded я загружаю свое imagebox с помощью

image_box.Source = new BitmapImage(new Uri("pack://application:,,,/images/pic.png"));

У меня есть следующий код на Rotate_Click (отправитель объекта, RoutedEventArgs e)

BitmapImage bmp = new BitmapImage();
bmp.BeginInit();
bmp.UriSource = new Uri("pack://application:,,,/images/pic.png");
bmp.EndInit();

TransformedBitmap myRotatedBitmapSource = new TransformedBitmap();
myRotatedBitmapSource.BeginInit();
myRotatedBitmapSource.Source = bmp;
myRotatedBitmapSource.Transform = new RotateTransform(90);
myRotatedBitmapSource.EndInit();
image_box.Source = myRotatedBitmapSource;

все, что я хочу в этом коде, это

bmp.UriSource = new Uri ("pack: // application: ,,, / images / pic.png");

для использования

расположение image_box, например

bmp.UriSource = image_box.Source;

, я пытаюсь

Uri ur = new Uri(image_box.Source.ToString());
...
bmp.UriSource = ur;

, но при втором щелчке я получил неверный URL

1 Ответ

0 голосов
/ 03 февраля 2019

Выражение

image_box.Source.ToString()

возвращает только допустимую строку URI, когда Source является BitmapImage.Однако во втором вызове вашего обработчика Click, Source является TransformedBitmap.

. Вы должны просто повторно использовать исходное исходное изображение и увеличить (или уменьшить) угол поворота, кратный 90.

private BitmapImage source = new BitmapImage(new Uri("pack://application:,,,/images/pic.png"));
private double rotation = 0;

private void Rotate_Click(object sender, RoutedEventArgs e)
{
    rotation += 90;
    image_box.Source = new TransformedBitmap(source, new RotateTransform(rotation));
}

Или также сохраните TransformedBitmap и измените только его свойство Transform:

private BitmapImage source = new BitmapImage(new Uri("pack://application:,,,/images/pic.png"));
private double rotation = 0;
private TransformedBitmap transformedBitmap =
    new TransformedBitmap(source, new RotateTransform(rotation));
...
image_box.Source = transformedBitmap; // call this once
...

private void Rotate_Click(object sender, RoutedEventArgs e)
{
    rotation += 90;
    transformedBitmap.Transform = new RotateTransform(rotation);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...