J'ai créé un service de fenêtre pour mettre tous mes fichiers TIFF dans la base de données et de les stockées sous forme Byte[]
.Comment afficher TIFF (sous forme d'octet []) sur le contrôle de l'image Silverlight
Maintenant, je veux être en mesure de les afficher par le contrôle de l'image Silverlight
donc j'utiliser le convertisseur pendant la liaison XAML afin de convertir le Byte[]
à Bitmap
parce que le Image.Source
acceptent que eitheir URI (Je n'ai pas le fichier stocké sur le serveur ne peut donc pas utiliser cette méthode) ou 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;
Cependant, je reçois l'exception à bmi.SetSource(ms)
parce que Silverlight ne supporte que les images JPEG et PNG.
J'ai donc fait plus de recherches et savaient que je devrais convertir les octets de TIFF en octets de JPEG ou PNG, alors il fonctionnera.
Pour ce faire, j'ai essayé deux méthodes:
- Faire la conversion sur le serveur: dans mon RIA appel de service, après avoir récupéré la
ImageGallery
, je boucle à travers l'image disponible pour convertir les octets de TIFF aux octets de JPEG.
MAIS CELA NE FONCTIONNE PAS .... Pouvez-vous me dire où j'ai mal fait?
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;
}
- L'autre solution consiste à utiliser LibTiff.Net bibliothèque pour convertir directement la
Byte[]
de TIFF àWritableBitmap
directement sur Silverlight.
Cependant, après avoir creusé par leur exemple d'application ou à l'aide réflecteur pour voir les fonctions de code source, je ne peux toujours pas comprendre comment utiliser leur bibliothèque pour convertir les octets de TIFF à WritableBitmap
JPEG (ou PNG) parce que leur exemple montre seulement l'API pour utiliser la recherche du TIFF dans un répertoire de fichiers. Dans mon cas, je n'ai pas de fichier existant sur le serveur.
quelqu'un peut me aider comment afficher le fichier TIFF sur le contrôle de l'image de Silverlight?
J'ai cherché le forum, mais n'a pas trouvé de réponse solide pour cela.
grâce