【问题标题】:Opening an image file into WritableBitmap将图像文件打开到 WriteableBitmap
【发布时间】:2010-11-23 08:53:50
【问题描述】:

这就是问题所在。 我想从本地驱动器打开一个文件,然后把它变成一个 WritableBitmap 以便我可以编辑它。 但问题是,我无法从 Uri 或类似的东西创建 WritableBitmap。我也知道如何将文件打开到 BitmapImage 中,但我不知道如何将文件打开为 WritableBitmap。 有没有办法将文件直接打开到 WritableBitmap,如果没有,有没有办法将 BitmapImage 转换为 WritableBitmap? 谢谢大家。

【问题讨论】:

  • 看来我们可以直接将位图传递给 writablebitmaps 构造函数。我第一次尝试时,我的 VS 给了我错误,但它现在似乎可以正常工作。抱歉,这根本不是一个好问题。
  • 它会起作用,但如果超过几百万像素,它将被调整大小。

标签: c# silverlight writeablebitmap


【解决方案1】:

您可以将图像文件加载到BitmapImage 中,并将其用作WriteableBitmap 的来源:

BitmapImage bitmap = new BitmapImage(new Uri("YourImage.jpg", UriKind.Relative));
WriteableBitmap writeableBitmap = new WriteableBitmap(bitmap);

【讨论】:

  • 实际上,在 Siverlight 中,它给了我例外。所以这不是一个解决方案
  • @Peter,你收到了哪个例外?
  • BitmapImage bi = new BitmapImage(new Uri("header.png", UriKind.Relative)); WriteableBitmap wb = new WriteableBitmap(bi);第二行System.NullReferenceException was unhandled by user code: Object reference not set to an instance of an object.
  • @Peter,在调用 BitmapImage 构造函数后,您是否检查过 bi 不是 null?如果是这样,WriteableBitmap 构造函数失败是很合乎逻辑的。
  • 是的,我检查过了。看我的回答。你介意在你的机器上测试我的代码吗?
【解决方案2】:

我不是专家,也无法立即访问智能感知等,但这里是...

var fileBytes = File.ReadAllBytes(fileName);
var stream = new MemoryStream(fileBytes);
var bitmap = new BitmapImage(stream);
var writeableBitmap = new WritableBitmap(bitmap);

即使不是一个完美的例子,这也足以为您指明正确的方向。希望如此。

【讨论】:

  • 您不能将位图直接传递给可写位图
  • File.ReadAllBytes(fileName); 在 Silverlight 中不允许,除非在 OpenFileDialog 中
【解决方案3】:

在 Silverlight 5 中,您可以使用以下方法从本地磁盘打开文件并将其转换为 BitmapImage 并使其成为 WriteableBitmap;

        OpenFileDialog dlg = new OpenFileDialog();
        dlg.Multiselect = false;


        dlg.ShowDialog();
        byte[] byteArray = new byte[] { };
        if (dlg.File == null) return;
        BitmapImage bi = new BitmapImage();
        bi.CreateOptions = BitmapCreateOptions.None;
       // bi.UriSource = new Uri(@"C:\Users\saw\Desktop\image.jpg", UriKind.RelativeOrAbsolute);
        bi.SetSource(dlg.File.OpenRead());
        WriteableBitmap eb=new WriteableBitmap(bi);

在尝试创建 WriteableBitmap 时设置新的 Uri 给了我错误(对象引用未设置为对象的实例)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 2013-12-22
    相关资源
    最近更新 更多