我在检索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>
我使用Scrollbar
我想检索它,如控件
中所示这是我如何将图像加载到图像控件
private byte[] _ImageSource;
public byte[] ImageSource
{
get { return _ImageSource; }
set
{
_ImageSource = value;
RaisePropertyChanged("ImageSource");
}
}
我试图通过获取ImageSource
来检索图像控件中显示的图像,但它们不一样。我将图像旋转90度。但是当我加载它时,返回Image是相同的。
但使用背后的代码我可以像这样访问图像
img.Source
然后我将源转换为字节数组
答案 0 :(得分:1)
旋转Image元素不会在其Source属性中旋转ImageSource。
要创建旋转的ImageSource,请使用TransformedBitmap
:
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);
为避免您必须为每次转换创建新的源位图,您应该将ImageSource属性的类型从byte[]
更改为ImageSource
。
要将此内容写回另一个byte[]
,请使用其中一个BitmapEncoder
类,例如PngBitapEncoder
。