我创建了一个窗口服务来将我所有的 TIFF 文件放入数据库并将它们存储为Byte[]
.
现在我希望能够通过 Silverlight Image 控件显示它们
所以我在绑定 XAML 期间使用 Converter 来将其转换为Byte[]
,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库直接将
Byte[]
TIFF 转换为WritableBitmap
直接在 Silverlight 上。
但是,在挖掘了他们的示例应用程序或使用 Reflector 查看源代码功能后,我仍然无法弄清楚如何使用他们的库将 TIFF 的字节转换为WritableBitmap
JPEG(或 PNG),因为他们的示例仅显示 API使用在文件目录中搜索 TIFF。就我而言,我在服务器上没有现有文件。
有人可以帮我如何在 Silverlight 的图像控件上显示 TIFF 文件吗?
我搜索了论坛,但没有找到任何可靠的答案。
谢谢