首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保存BitmapSource时出错

保存BitmapSource时出错
EN

Stack Overflow用户
提问于 2016-12-13 00:22:30
回答 1查看 175关注 0票数 1

当我尝试保存BitmapSource时遇到问题。我总是在GDI+中得到一个错误,或者该文件正被另一个进程使用。

保存位图图像的方法

代码语言:javascript
复制
protected override void Save()
{
    Bitmap bitmap = Thumbnail.ToBitmap();

    if (Angle % 360 == 0)
        bitmap.RotateFlip(RotateFlipType.RotateNoneFlipNone);
    else if (Angle % 270 == 0)
        bitmap.RotateFlip(RotateFlipType.Rotate270FlipNone);
    else if (Angle % 180 == 0)
        bitmap.RotateFlip(RotateFlipType.Rotate180FlipNone);
    else if (Angle % 90 == 0)
        bitmap.RotateFlip(RotateFlipType.Rotate90FlipNone);

    bitmap.Save(Objects[0].FilePath);
    Objects[0].RaisePropertyChanged("Thumbnail");
}

BitmapSource到位图的转换

代码语言:javascript
复制
public static Bitmap ToBitmap(this BitmapSource bitmapsource)
{
    using (MemoryStream stream = new MemoryStream())
    {
        BitmapEncoder enc = new BmpBitmapEncoder();
        enc.Frames.Add(BitmapFrame.Create(bitmapsource));
        enc.Save(stream);

        using (var tempBitmap = new Bitmap(stream))
        {
            return new Bitmap(tempBitmap);
        }
    }
}

用于保存的“缩略图”来自get-property

代码语言:javascript
复制
public BitmapSource Image
{
    get { return new BitmapImage(new Uri(FilePath)); }
}

并且还在视图中使用该文件的缩略图。我是用windows shell api得到的。

代码语言:javascript
复制
public static BitmapSource GetThumbnail(this string This, BitmapSize size = BitmapSize.Large)
{
    if (ShellObject.IsPlatformSupported)
    {
        ShellObject shellitem = ShellObject.FromParsingName(This);

        try
        {
            if (size == BitmapSize.Small)
                return shellitem.Thumbnail.SmallBitmap.ToBitmapSource();
            else if (size == BitmapSize.Medium)
                return shellitem.Thumbnail.MediumBitmap.ToBitmapSource();
            else if (size == BitmapSize.Large)
                return shellitem.Thumbnail.LargeBitmap.ToBitmapSource();
            else
                return shellitem.Thumbnail.ExtraLargeBitmap.ToBitmapSource(); ;
        }
        catch (Exception)
        {
            return null;
        }
    }

        return null;
    }

anyon有解决方案吗?

谢谢Wim

EN

回答 1

Stack Overflow用户

发布于 2016-12-13 00:35:38

尝试使用Application.current.dispatcher

代码语言:javascript
复制
Application.current.dispatcher(()=>Save());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41105143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档