我正在做一个项目,其中DICOM的内置类给我ImageSource
,我想在我的silverlight ImageSource
控件中使用Image
。这是我通过WCF服务进行的转换。我发现WCF不支持ImageSource
,所以我需要将内置类的输出转换为Image或者在byte []中。因此,我可以将该输出发送到Silverlight,在Silverlight客户端中,我将它重新转换为ImageSource,并可以轻松地将其分配给Image Control。
我用Google搜索了,但我没有找到任何帮助。任何人都可以帮我解决这个问题,或者为我提供任何替代解决方案。任何帮助将不胜感激,提前致谢。
注意: - 我没有任何内置类代码修改权限。作为第三方图书馆。
更新: -
简要描述;简介:
我有一个课程,请说GetImageSource
,我有一个方法说giveImgSource()
。现在我的问题是:
在WCF中,我必须调用此方法,在从此方法获取ImageSource
后,我需要将其传递给我的silverlight客户端。由于WCF不知道ImageSource
,所以如果您知道,我需要将此方法的输出转换为以下中的某个或任何替代方法:
byte[]
Image
FileStream
MemoryStream etc
答案 0 :(得分: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;
答案 1 :(得分:1)
请参阅以下链接,将ImageSource转换为byte []。它们使用在PresentationCore库下可用的BitmapSource和WriteableBitmap类。
(1)How to Convert ImageSource to byte[]?
(2)How to Convert ImageSource to byte[] and back to ImageSource?
希望它能解决你的问题。
答案 2 :(得分:0)
以下两个辅助方法应该可以解决这个问题:
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;
}