Я создал оконную службу для помещения всех моих файлов TIFF в базу данных и сохранил их как Byte[]
.
Теперь я хочу отображать их с помощью элемента управления Silverlight Image
Поэтому я использую конвертер во время связывания XAML, чтобы преобразовать Byte[]
в Bitmap
, потому что Image.Source
принимает только URI eitheir (у меня нет файла, сохраненного на сервере, поэтому я не могу использовать этот метод ) или 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 в файловой директории. В моем случае у меня нет файла на сервере.
Может ли кто-нибудь помочь мне, как показать файл TIFF на элементе управления изображением Silverlight?
Я искал форум, но не нашел какого-либо убедительного ответа на этот вопрос.
спасибо