Creé un servicio de ventana para poner todos mis archivos TIFF en la base de datos y los almacené como Byte[]
.Cómo mostrar TIFF (en forma de Byte []) en Silverlight Control de imagen
Ahora quiero ser capaz de mostrar a través de Silverlight Control de la imagen
lo que el uso del convertidor durante XAML vinculante con el fin de convertir el Byte[]
a Bitmap
porque el Image.Source
sólo aceptan eitheir URI (no tengo el archivo almacenado en el servidor no puede usar este método) o 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;
Sin embargo, me sale la excepción bmi.SetSource(ms)
porque Silverlight sólo es compatible con imágenes JPEG y PNG.
Así que hice más investigación y sabía que debería convertir los bytes de TIFF a bytes de JPEG o PNG, entonces funcionará.
para hacer eso probé dos métodos:
- hacer la conversión en el servidor: en mi llamada de servicio RIA, después de recuperar la
ImageGallery
, yo bucle a través de la imagen disponibles para convertir los bytes de TIFF a los bytes de JPEG.
PERO NO FUNCIONA .... ¿Puede decirme dónde hice mal?
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;
}
- La otra solución es utilizar LibTiff.Net biblioteca para convertir directamente la
Byte[]
de TIFF aWritableBitmap
directamente en Silverlight.
Sin embargo, después de cavar a través de su aplicación de la muestra o el uso de reflector para ver las funciones de código fuente, todavía no puedo encontrar la manera de utilizar la biblioteca para convertir los bytes de TIFF a WritableBitmap
JPEG (o PNG), porque su muestra solo muestra la API para usar la búsqueda TIFF en un directorio de archivos. En mi caso, no tengo un archivo existente en el servidor.
¿Alguien me puede ayudar a mostrar el archivo TIFF en el control de imagen de Silverlight?
Busqué en el foro pero no encontré ninguna respuesta sólida para esto.
gracias