Tai*_*Tai 5 .net c# tiff silverlight-4.0 libtiff.net
我创建了一个窗口服务,将所有TIFF文件放入数据库并存储为Byte[]
.
现在我希望能够通过Silverlight Image控件显示它们
所以我在绑定XAML时使用Converter以转换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;
Run Code Online (Sandbox Code Playgroud)
但是,我得到了例外,bmi.SetSource(ms)
因为Silverlight仅支持JPEG和PNG图像.
所以我做了更多的研究,并知道我应该将TIFF的字节转换为JPEG或PNG的字节然后它将工作.
为此,我尝试了两种方法:
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;
}
Run Code Online (Sandbox Code Playgroud)
Byte[]
TIFF WritableBitmap
直接转换为直接在Silverlight上.但是,在通过他们的示例应用程序或使用Reflector查看源代码函数之后,我仍然无法弄清楚如何使用他们的库将TIFF的字节转换为WritableBitmap
JPEG(或PNG),因为他们的示例仅显示了API使用搜索文件目录中的TIFF.就我而言,我在服务器上没有现有文件.
有人可以帮我如何在Silverlight的Image控件上显示TIFF文件吗?
我搜索了论坛,但没有找到任何可靠的答案.
谢谢
我认为 LibTiff 将是最佳选择。最终Tiff.ClientData
接受Stream
tiff 数据。如果你的 tiff 数据确实是 abyte[]
那么你只需要MemoryStream
围绕它。更有可能的是,在某个时刻,它byte[]
是从流中提取的,因此您可能甚至不需要这个中间byte[]
/ MemoryStream
。
归档时间: |
|
查看次数: |
3689 次 |
最近记录: |