c# - 当 ImageSource 需要为字符串时,WPF 旋转 Image 标签的 Source
问题描述
我有我的图像标签代码:
<Image Source="{Binding ImageSource}">
<Image.LayoutTransform>
<RotateTransform Angle="{Binding RotateAngle}" />
</Image.LayoutTransform>
</Image>
我正在旋转图像标签。我RotateAngle
从<RotateTransform Angle="{Binding RotateAngle}" />
.
一切正常:
但是如何使Image
标签保持在相同的位置(如屏幕上的第二和第三位置)并且仅Source
在我的Image
翻转(Source="{Binding ImageSource}
)中?
我可以做这个:
- 加载
ImageSource
为System.Drawing.Bitmap
(现在它是一个字符串) - 写类似:
Bitmap.RotateFlip(rotateFlipType); ImageSource = ImageUtilities.BitmapToBitmapSource(Bitmap);
- 从 xaml 和 csharp 代码中删除
RotateAngle
(现在不需要)
一切都会正常工作:
但就我而言,我不想ImageSource
成为一个字符串Bitmap
。如何Image Source
只旋转而不创建Bitmap/BitmapImage/BitmapSource
对象?
解决方案
如果您只想旋转 90° 的倍数,则可以使用 TransformedBitmap。
修改您的视图模型,如下所示,并绑定到它的RotatedImage
属性,如
<Image Source="{Binding RotatedImage}">
查看模型
public class ViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private BitmapSource imageSource;
private double rotateAngle;
public BitmapSource ImageSource
{
get { return imageSource; }
set
{
imageSource = value;
PropertyChanged?.Invoke(
this, new PropertyChangedEventArgs(nameof(ImageSource)));
PropertyChanged?.Invoke(
this, new PropertyChangedEventArgs(nameof(RotatedImage)));
}
}
public double RotateAngle
{
get => rotateAngle;
set
{
rotateAngle = value;
PropertyChanged?.Invoke(
this, new PropertyChangedEventArgs(nameof(RotateAngle)));
PropertyChanged?.Invoke(
this, new PropertyChangedEventArgs(nameof(RotatedImage)));
}
}
public BitmapSource RotatedImage
{
get
{
return new TransformedBitmap(
ImageSource, new RotateTransform(RotateAngle));
}
}
}
推荐阅读
- php - 如何将自定义域重定向到我的项目域
- laravel - Laravel 计划任务输出
- android - 如何在 Flutter 中使用动态大小的小部件设置 BackdropFilter
- vba - 单击 Excel 中的超链接以在不同的工作表上设置自动过滤器
- php - PHP上传文件:未能收到错误消息
- python - 查找具有特定类名的元素
- android - Android 活动堆栈(BaseActivity)
- java - getElementsAnnotatedWith 方法在注释处理时返回空列表
- hugo - 单页添加到“单页”网站不起作用
- html - 在 Visual Studio Code 中更改匹配标签的文本装饰样式