1

私は、DICOMの組み込みクラスが私に与えるプロジェクトを行っています。それを、私のSilverlightコントロールでImageSource使用したいと思います。この変換は、WCFサービスを介して行っています。WCFはをサポートしていないことがわかったので、組み込みクラスの出力をImageまたはbyte[]に変換する必要があります。その出力をSilverlightに送信できるように、SilverlightクライアントでImageSourceに再変換し、ImageControlに簡単に割り当てることができます。ImageSourceImageImageSource

私はこれをグーグルで検索しましたが、そこでは何の助けも見つかりませんでした。誰かが私がこの問題を解決するのを手伝ってくれるか、これに対する代替の解決策を私に提供してくれますか?どんな助けでもありがたいです、事前に感謝します。

注:-組み込みクラスのコードを変更する権限がありません。そのサードパーティライブラリとして。

更新:- 簡単な説明:私はクラスを言うGetImageSourceことができ、その中で私はメソッドを言うことができますgiveImgSource()。ここで、私の質問は次のとおりです。WCFでは、このメソッドを呼び出すImageSource必要があり、このメソッドから取得した後、Silverlightクライアントに渡す必要があります。WCFはについて知らないImageSourceので、このメソッドの出力を次のいずれかに変換するか、知っている場合は別の方法に変換する必要があります。

byte[]
Image
FileStream
MemoryStream etc
4

3 に答える 3

3

png画像ですか?次に、これを使用してbyte[]に変換します。

var image = (BitmapSource)value;
BitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(image));
using (var ms = new MemoryStream())
{
    encoder.Save(ms);
    return ms.ToArray();
}

更新:デコード:

var bytes = (byte[])value;

var image = new BitmapImage();
image.BeginInit();

if (bytes == null) 
{
    // Processing null case
}
else
{
    using (var ms = new MemoryStream(bytes))
    {
        image.CacheOption = BitmapCacheOption.OnLoad;
        image.StreamSource = ms;

        image.EndInit();
    }
}

return image;
于 2012-08-13T10:30:53.140 に答える
1

ImageSourceをbyte[]に変換するには、以下のリンクを参照してください。それらは、PresentationCoreライブラリで利用可能なBitmapSourceクラスとWriteableBitmapクラスを使用します。

(1)ImageSourceをbyte []に​​変換する方法は?

(2)ImageSourceをbyte []に​​変換し、ImageSourceに戻す方法は?

それがあなたの問題を解決することを願っています。

于 2012-08-13T11:59:39.693 に答える
0

次の2つのヘルパーメソッドでトリックを実行できるはずです。

public BitmapImage ImageFromBuffer(Byte[] bytes)
{
    MemoryStream stream = new MemoryStream(bytes);
    BitmapImage image = new BitmapImage();
    image.BeginInit();
    image.StreamSource = stream;
    image.EndInit();
    return image;
}

public Byte[] BufferFromImage(BitmapImage imageSource)
{
    Stream stream = imageSource.StreamSource;
    Byte[] buffer = null;
    if (stream != null && stream.Length > 0)
    {
        using (BinaryReader br = new BinaryReader(stream))
        {
            buffer = br.ReadBytes((Int32)stream.Length);
        }
    }

    return buffer;
}
于 2012-08-13T13:19:00.443 に答える