2016-07-26 80 views
2

旋轉使用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'時,是否從流中加載原始圖像?否則它將無法工作 - 它會是'空'。 –

回答

1

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

太棒了,謝謝 ! –

相關問題