C# 使用mvvm从图像控件获取加载的图像

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

检索WPF图像控件中显示的图像时出现问题

<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);