2010-04-30 40 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

相关问题