我创建了一个窗口服务,将所有 TIFF 文件放入数据库并将它们存储为Byte[]
.
现在我希望能够通过Silverlight Image控件来显示它们
所以我在绑定 XAML 期间使用转换器来转换Byte[]
to Bitmap
因为Image.Source
只接受他们的 URI(我没有将文件存储在服务器上,所以不能使用此方法)或Bitmap
.
BitmapImage bmi = new BitmapImage();
if (value != null)
{
ImageGallery imageGallery = value as ImageGallery;
byte[] imageContent = imageGallery.ImageContent;
string imageType = imageGallery.ImageType;
using (MemoryStream ms = new MemoryStream(imageContent))
{
bmi.SetSource(ms);
}
}
return bmi;
但是,我得到了例外bmi.SetSource(ms)
因为Silverlight只支持JPEG和PNG图像。
所以我做了更多的研究,知道我应该将 TIFF 的字节转换为 JPEG 或 PNG 的字节,然后它就可以工作了。
为此,我尝试了两种方法:
- 在服务器上进行转换:在我的 RIA 服务调用中,检索后
ImageGallery
,我循环遍历可用图像,将 TIFF 字节转换为 JPEG 字节。
但这不起作用......
你能告诉我我哪里做错了吗?
public IQueryable<ImageGallery> GetImageGalleries()
{
var imageGalleries = this.ObjectContext.ImageGalleries.OrderBy(i=>i.ImageName);
foreach (ImageGallery imageGallery in imageGalleries)
{
if (imageGallery.ImageType == ".tif" || imageGallery.ImageType == ".tiff")
{
//Convert the Tiff byte array format into JPEG stream format
System.Drawing.Bitmap dImg = new System.Drawing.Bitmap(new MemoryStream(imageGallery.ImageContent));
MemoryStream ms = new MemoryStream();
dImg.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
//then convert the JPEG stream format into JPEG byte array format
byte[] buf = new byte[ms.Length];
ms.Read(buf, 0, buf.Length);
//Changing the format tiff byte[] of ImageGallery to jpeg byte[]
imageGallery.ImageContent = buf;
}
}
return imageGalleries;
}
- 另一种解决方案是使用LibTiff.Net http://bitmiracle.com/libtiff/库直接转换
Byte[]
的 TIFF 至WritableBitmap
直接在 Silverlight 上。
然而,在深入研究他们的示例应用程序或使用 Reflector 查看源代码函数后,我仍然不知道如何使用他们的库将 TIFF 的字节转换为WritableBitmap
JPEG(或 PNG),因为他们的示例仅显示使用在文件目录中搜索 TIFF 的 API。就我而言,服务器上没有现有文件。
有人可以帮我如何在 Silverlight 的图像控件上显示 TIFF 文件吗?
我搜索了论坛,但没有找到任何可靠的答案。
谢谢