2010-04-30 33 views
0

我收到以下異常的代碼,使用Silverlight 3中工作,但已經停止,因爲升級到Silverlight 4的工作:Silverlight 4的WriteableBitmap的ScaleTransform異常,但在V3工作

System.AccessViolationException了未處理 消息=嘗試讀取或寫入受保護的內存。這通常表明其他內存已損壞。

namespace SilverlightApplication1 
{ 
    public partial class MainPage : UserControl 
    { 
     public MainPage() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, RoutedEventArgs e) 
     { 
      var OpenFileDialog = new OpenFileDialog(); 
      OpenFileDialog.Filter = "*.jpg|*.jpg"; 

      if (OpenFileDialog.ShowDialog() == true) 
      { 
       var file = OpenFileDialog.Files.ToArray()[0]; 
       ScaleStreamAsBitmap(file.OpenRead(), 200); 
      } 
     } 

     public static WriteableBitmap ScaleStreamAsBitmap(Stream file, int maxEdgeLength) 
     { 
      file.Position = 0; 
      var src = new BitmapImage(); 
      var uiElement = new System.Windows.Controls.Image(); 
      WriteableBitmap b = null; 
      var t = new ScaleTransform(); 

      src.SetSource(file); 
      uiElement.Source = src; 

      //force render 
      uiElement.Effect = new DropShadowEffect() { ShadowDepth = 0, BlurRadius = 0 }; ; 

      //calc scale 
      double scaleX = 1; 
      double scaleY = 1; 
      if (src.PixelWidth > maxEdgeLength) 
       scaleX = ((double)maxEdgeLength)/src.PixelWidth; 
      if (src.PixelHeight > maxEdgeLength) 
       scaleY = ((double)maxEdgeLength)/src.PixelHeight; 
      double scale = Math.Min(scaleX, scaleY); 
      t.ScaleX = scale; 
      t.ScaleY = scale; 

      b = new WriteableBitmap(uiElement, t); 

      return b; 
     } 
    } 
} 

感謝

+0

helpppp ............................. – Imran 2010-05-01 17:34:14

回答

0

我有同樣的問題,我成功地解決這個問題!

b=new new WriteableBitmap(0, 0); 
b.SetSource(file); 
b.Render(new Image() { Source = src, Effect = new DropShadowEffect() { ShadowDepth = 0, BlurRadius = 0 } }, new ScaleTransform() { ScaleX = scaleX , ScaleY = scaleY }); 

而且你可以刪除:uiElementfile.Position

相關問題