从位图到另一个不工作

问题描述:

旋转使用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... 
    } 
+0

是不是有一个原因,你没有使用'图像'控制'RenderTransform'?更便宜和更快。 –

+0

是的,它与项目有关,所以我不会做一个转换。 –

+0

当您尝试使用'StreamSource'时,是否从流中加载原始图像?否则它将无法工作 - 它会是'空'。 –

可以使用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

太棒了,谢谢 ! –