3

以下のコードがあります。大まかな概要は、ファイル共有から.emfファイルを取得し、それをWPFがImage.Sourceに使用できるものに変換するカバーターであるということです。

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var fileName = (string)value;
        if (fileName == null)
            return new BitmapImage();
        using (var stream = File.Open(fileName, FileMode.Open))
        {
            return GetImage(stream);
        }
    }

    internal BitmapImage GetImage(Stream fileStream)
    {
        var img = Image.FromStream(fileStream);
        var imgBrush = new BitmapImage();
        imgBrush.BeginInit();
        imgBrush.StreamSource = ConvertImageToMemoryStream(img);
        imgBrush.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
        imgBrush.EndInit();
        return imgBrush;
    }

    public MemoryStream ConvertImageToMemoryStream(Image img)
    {
        var ms = new MemoryStream();
        img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
        return ms;
    } 

さて、ここではすべてが順調です。ユーザーには「印刷キャリブレーション」ページが必要になるため、「SampleDoc.emf」ファイルをアプリケーションに含め、リソースとしてマークしました。

ただし、そのリソースファイルをポイントすると、File.Open()の部分を正しく取得できないようです。これをどのように行うことができるかについてのアイデアはありますか?

4

1 に答える 1

5

「SampleDoc.emf」をリソースとしてマークすると、コンパイルされたアセンブリ内にのみ存在します(非常に簡単に言えば)。私が尋ねたLightSwitchでの追加ファイルの取得を参照し、あなたの質問に答えることができる同様の質問に答えました。

// creates a StreamReader from the TestFile.txt
StreamReader sr = new StreamReader(assembly.GetManifestResourceStream("SomeFile.txt"));

このコードを使用すると、リソースにアクセスできます。

もう1つの方法は、ファイルのBuildOptionを「コンテンツ」としてマークし、「コピーアクション」を「常にコピー」または「新しい場合のみ」に設定すると、プロジェクトのビルド時にファイルが出力ディレクトリにコピーされます。

于 2012-04-24T20:45:52.553 に答える