C# 使用mvvm从图像控件获取加载的图像
检索WPF图像控件中显示的图像时出现问题C# 使用mvvm从图像控件获取加载的图像,c#,wpf,image,mvvm,C#,Wpf,Image,Mvvm,检索WPF图像控件中显示的图像时出现问题 <Image x:Name="img" RenderTransformOrigin="0.5, 0.5" Source="{Binding ImageSource, Source={x:Static vm:ItemProvider.instance}, UpdateSourceTrigger=PropertyChanged}" > <Image.Re
<Image x:Name="img" RenderTransformOrigin="0.5, 0.5" Source="{Binding ImageSource, Source={x:Static vm:ItemProvider.instance}, UpdateSourceTrigger=PropertyChanged}" >
<Image.RenderTransform>
<RotateTransform CenterX="0" CenterY="0" Angle="{Binding ElementName=ScrollBar, Path=Value}" />
</Image.RenderTransform>
</Image>
private byte[] _ImageSource;
public byte[] ImageSource
{
get { return _ImageSource; }
set
{
_ImageSource = value;
RaisePropertyChanged("ImageSource");
}
}
我试图通过获取ImageSource
来检索图像控件中显示的图像,但它们不相同。我将图像旋转90度。但加载时返回的图像是相同的
但是使用代码隐藏,我可以像这样访问图像
img.Source
然后我将源转换为字节数组旋转图像元素不会在其源属性中旋转ImageSource
要创建旋转的图像源,请使用:
为避免每次转换都必须创建新的源位图,应将ImageSource属性的类型从
byte[]
更改为ImageSource
要将其写回另一个
字节[]
,请使用位图编码器
类之一,例如PngBitapEncoder
,注意,在ImageSource绑定上设置UpdateSourceTrigger=PropertyChanged
是毫无意义的。一点效果都没有,嗨,克莱门斯。但使用该代码,图像只能以90度的增量旋转。但我需要从滑块到360的任何值。我该如何解决我的问题?或者我使用像ImageMagick这样的库。但是用户的电脑速度很慢。谢谢你。我觉得你在写“我把图像旋转90度”的时候就想这么做。无论如何,您也可以将旋转后的图像元素渲染成RenderTargetBitmap。您是否可以共享一些代码。我做不到。我无法将RotateTransform转换为byte[]我尝试搜索RenderTargetBitmap,但输出不是我期望的。“输出不是我期望的”。那么你期待什么呢?你应该知道当你旋转90°的倍数以外的任何东西时,你希望结果是什么样子。输出位图是矩形的,因此您可以剪切零件或将零件留空。
var sourceBitmap = new BitmapImage();
using (var stream = new MemoryStream(ImageSource))
{
sourceBitmap.BeginInit();
sourceBitmap.CacheOption = BitmapCacheOption.OnLoad;
sourceBitmap.StreamSource = stream;
sourceBitmap.EndInit();
}
// This should be another view model property that the Slider is bound to.
// Only multiples of 90 degrees are valid values.
var rotationAngle = 90d;
var rotation = new RotateTransform(rotationAngle);
var rotatedBitmap = new TransformedBitmap(sourceBitmap, rotation);