Silverlight 4 WriteableBitmap Исключение ScaleTransform, но работало в v3 - PullRequest
0 голосов
/ 30 апреля 2010

Я получаю следующее исключение для кода, который работал в silverlight 3, но перестал работать после обновления до silverlight 4:

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;
        }
    }
}

Спасибо

1 Ответ

0 голосов
/ 15 июня 2010

У меня была такая же проблема, и мне удалось ее решить!

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 });

И вы можете удалить :uiElement и file.Position!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...