2010-08-06 4 views
1

System.Drawing.Image a les méthodes faciles à utiliser pour FromFile et ToFile. Quel est l'équivalent pour l'image bitmap Silverlight? J'essaie de charger et d'enregistrer une image jpeg dans le cadre d'un test unitaire. Les octets doivent correspondre exactement pour qu'il passe. Voici ma conjecture actuelle:Qu'est-ce que FromFile et ToFile équivalent pour BitmapImage?

//I am not sure this is right 
    private BitmapImage GetImage(string fileName) 
    { 
     BitmapImage bitmapImage = new System.Windows.Media.Imaging.BitmapImage(); 
     using (Stream imageStreamSource = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read)) 
     { 
      bitmapImage.BeginInit(); 
      bitmapImage.StreamSource = imageStreamSource; 
      bitmapImage.EndInit(); 
     } 

     return bitmapImage; 
    } 

    private void SaveImage(BitmapImage bitmapImage, string file) 
    { 
     //How to do this? 
    } 

Répondre

1

Une application Silverlight dans le navigateur ne peut pas ouvrir un fichier en utilisant un nom de fichier. Vous en auriez besoin à court de navigateur avec une confiance élevée pour le faire.

Silverlight n'a pas de codage d'image intégré, donc vous ne pouvez pas prendre le contenu d'un bitmap (BTW vous devez utiliser WriteableBitmap pour pouvoir accéder à l'image brute).

Vous trouvez quelque chose dont vous avez besoin dans Image Tools.

1

De MSDN link, utilisez la surcharge de cteur qui prend dans un URI ou

BitmapImage myBitmapImage = new BitmapImage(); 

// BitmapImage.UriSource must be in a BeginInit/EndInit block 
myBitmapImage.BeginInit(); 
myBitmapImage.UriSource = new Uri(@"C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Water Lilies.jpg"); 
myBitmapImage.DecodePixelWidth = 200; 
myBitmapImage.EndInit(); 

//set image source 
myImage.Source = myBitmapImage; 

Pour enregistrer l'image sur le disque, vous aurez besoin du codeur spécifique par exemple

+0

Qu'est-ce que DecodePixelWidth? –

+0

du commentaire de l'extrait de code msdn (premier lien) "Pour enregistrer une mémoire d'application importante, définissez la valeur DecodePixelWidth ou DecodePixelHeight de la valeur BitmapImage de la source d'image sur la hauteur et la largeur souhaitées de l'image rendue. Ainsi, l'application mettra en cache l'image comme si elle était rendue à sa taille normale plutôt qu'à la taille affichée. " – Gishu