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