从位图到另一个不工作
问题描述:
旋转使用UriSource一个BitmapImage的影响StreamSource的作品使用下面的代码从位图到另一个不工作
private void RotateDocumentImageSourceRight()
{
var biOriginal = (BitmapImage)documentImage.Source;
if (biOriginal == null)
return;
var biRotated = new BitmapImage();
biRotated.BeginInit();
biRotated.UriSource = biOriginal.UriSource;
switch (biOriginal.Rotation)
{
case Rotation.Rotate0:
biRotated.Rotation = Rotation.Rotate270;
break;
case Rotation.Rotate270:
biRotated.Rotation = Rotation.Rotate180;
break;
case Rotation.Rotate180:
biRotated.Rotation = Rotation.Rotate90;
break;
case Rotation.Rotate90:
biRotated.Rotation = Rotation.Rotate0;
break;
default:
break;
}
biRotated.EndInit();
documentImage.Source = biRotated;
}
但是,当我改变的BitmapImage存储到StreamSource的方式不起作用,图像消失
private void RotateDocumentImageSourceRight()
{
...same code...
biRotated.StreamSource= biOriginal.StreamSource;
...same code...
}
答
可以使用TransformedBitmap
,这是使用BitmapImage
内部,当你指定Rotation
属性。它会创建一个新的图像,但速度会更快(不需要再次读取流)。
private void RotateDocumentImageSourceRight()
{
var biOriginal = (BitmapSource)documentImage.Source;
if (biOriginal == null)
return;
var angle = 0.0;
var biRotated = biOriginal as TransformedBitmap;
if (biRotated != null)
{
biOriginal = biRotated.Source;
angle = ((RotateTransform)biRotated.Transform).Angle;
}
angle -= 90;
if (angle < 0) angle += 360;
biRotated = new TransformedBitmap(biOriginal, new RotateTransform(angle));
documentImage.Source = biRotated;
}
+0
太棒了,谢谢 ! –
是不是有一个原因,你没有使用'图像'控制'RenderTransform'?更便宜和更快。 –
是的,它与项目有关,所以我不会做一个转换。 –
当您尝试使用'StreamSource'时,是否从流中加载原始图像?否则它将无法工作 - 它会是'空'。 –