我創建了一個窗口服務,將所有TIFF文件放入數據庫並將它們存儲爲Byte[]
。如何在Silverlight圖像控件上顯示TIFF(以字節[]的形式)
現在我希望能夠通過Silverlight的圖像控制
所以我用的轉換器,以便結合XAML中的Byte[]
轉換爲Bitmap
,因爲Image.Source
只接受eitheir 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;
但是,由於Silverlight僅支持JPEG和PNG圖像,因此我在bmi.SetSource(ms)
處得到例外。
所以我做了更多的研究,並知道我應該將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庫直接TIFF的
Byte[]
轉換爲WritableBitmap
直接的Silverlight。
然而,通過他們的示例應用程序挖掘或使用反射來看看源代碼的功能後,我仍然無法弄清楚如何使用他們的庫TIFF的字節轉換爲WritableBitmap
JPEG(或PNG),因爲他們的示例僅顯示在文件目錄中使用搜索TIFF的API。就我而言,我沒有在服務器上存在的文件。
有人可以幫助我如何在Silverlight的Image控件上顯示TIFF文件?
我搜索了論壇,但沒有找到任何可靠的答案。
感謝