0


0

Uriではなくオブジェクトを扱うときにwpfのイメージコントロールにビットマップオブジェクトを配置する方法

PicSet1.dllからWPFイメージコントロールにいくつかの写真を取得しようとしています。 ビットマップをコントロールに配置する方法がわかりません。 画像クラスにはこれに対するメソッドはありません。

        System.Reflection.AssemblyName aName;
        aName = System.Reflection.AssemblyName.GetAssemblyName("c:\\PicSet1.dll");
        asm = System.Reflection.Assembly.Load(aName);
        var result = asm.GetManifestResourceNames();
        var bitmap= new System.Drawing.Bitmap(asm.GetManifestResourceStream(res[0]));
        image1 = bitmap.

1 Answer


0


DLLから画像を読み込むと、XAMLの画像をImageSourceにバインドできます。

重要なのは、参照DLLの画像にBuild Action = Embedded Resourceがあることを確認することです。

これがXAMLです。


ViewModelは次のとおりです。

using System.Drawing.Imaging;
using System.IO;
using System.Reflection;
using System.Windows.Media;
using System.Windows.Media.Imaging;

namespace LoadImage.ViewModel
{
  public class MainViewModel : ViewModelBase
  {
    public MainViewModel()
    {
      System.Reflection.AssemblyName aName;
      aName = System.Reflection.AssemblyName.GetAssemblyName("PicSet1.dll");
      if (aName != null)
      {
        Assembly asm = System.Reflection.Assembly.Load(aName);
        if ( asm != null )
        {
          string[] resources = asm.GetManifestResourceNames();
          if ((resources != null) && (resources.Length > 0))
          {
            string name = resources[0];
            if (!string.IsNullOrEmpty(name))
            {
              using (Stream myImage = asm.GetManifestResourceStream(name))
              {
                if (myImage != null)
                {
                  using (System.Drawing.Image photo = System.Drawing.Image.FromStream((Stream) myImage))
                  {
                    MemoryStream finalStream = new MemoryStream();

                    photo.Save(finalStream, ImageFormat.Png);

                    // translate to image source
                    PngBitmapDecoder decoder = new PngBitmapDecoder(finalStream,
                                                                    BitmapCreateOptions.PreservePixelFormat,
                                                                    BitmapCacheOption.Default);
                    EmbeddedPicture = decoder.Frames[0];
                  }
                }
              }
            }
          }
        }
      }
    }

    private ImageSource _embeddedPicture;
    public ImageSource EmbeddedPicture
    {
      get
      {
        return _embeddedPicture;
      }
      set
      {
        _embeddedPicture = value;
        OnPropertyChanged("EmbeddedPicture");
      }
    }
  }
}