2010-11-23 10 views
3

Voici le problème. Je veux ouvrir un fichier à partir de lecteurs locaux, puis le transformer en WritableBitmap afin que je puisse le modifier. Mais le problème est, je ne peux pas créer un WritableBitmap à partir d'Uri ou quelque chose comme ça. Aussi je sais comment ouvrir un fichier dans BitmapImage mais je ne peux pas comprendre comment ouvrir un fichier en tant que WritableBitmap. Est-il possible d'ouvrir un fichier directement dans un WritableBitmap, si ce n'est pas le cas, existe-t-il un moyen de convertir un BitmapImage en un WritableBitmap? Merci les gars.Ouverture d'un fichier image dans WritableBitmap

+0

il semble que l'on peut passer un bitmap directement dans writablebitmaps constructeur. Mon VS m'a donné des erreurs pendant que je l'ai essayé pour la première fois mais cela semble fonctionner maintenant. Ce n'était pas une bonne question du tout, désolé les gars. – gkaykck

+0

Cela fonctionnera, mais il sera redimensionné si au-dessus de quelques méga pixels. –

Répondre

3

Vous pouvez charger votre fichier image dans un BitmapImage et l'utiliser comme source pour votre WriteableBitmap:

BitmapImage bitmap = new BitmapImage(new Uri("YourImage.jpg", UriKind.Relative)); 
WriteableBitmap writeableBitmap = new WriteableBitmap(bitmap); 
+0

Il semble que ce soit asynchrone, à droite ? Comment faisons-nous synchro? –

+1

En fait, dans Siverlight, cela me donne une exception. Donc, ce n'est pas une solution –

+0

@Peter, quelle exception recevez-vous? –

1

Je ne suis pas un expert et ne pas avoir immédiatement accès à IntelliSense et ainsi de suite, mais voilà ...

var fileBytes = File.ReadAllBytes(fileName); 
var stream = new MemoryStream(fileBytes); 
var bitmap = new BitmapImage(stream); 
var writeableBitmap = new WritableBitmap(bitmap); 

Même si pas un parfait exemple, cela devrait être suffisant pour vous orienter dans le droit direction. J'espère.

+0

vous ne pouvez pas passer un bitmap directement dans un writablebitmap – gkaykck

+0

je trouve que vous pouvez réellement, donc la question était stupide – gkaykck

+0

'File.ReadAllBytes (fileName);' non autorisé dans Silverlight, sauf dans OpenFileDialog –

0

Dans Silverlight 5, vous pouvez utiliser ci-dessous méthode pour ouvrir le fichier à partir du disque local et le convertir en BitmapImage et faites-le dans WriteableBitmap;

 OpenFileDialog dlg = new OpenFileDialog(); 
     dlg.Multiselect = false; 


     dlg.ShowDialog(); 
     byte[] byteArray = new byte[] { }; 
     if (dlg.File == null) return; 
     BitmapImage bi = new BitmapImage(); 
     bi.CreateOptions = BitmapCreateOptions.None; 
     // bi.UriSource = new Uri(@"C:\Users\saw\Desktop\image.jpg", UriKind.RelativeOrAbsolute); 
     bi.SetSource(dlg.File.OpenRead()); 
     WriteableBitmap eb=new WriteableBitmap(bi); 

nouvelle Uri mise m'a donné erreur (référence d'objet non définie à une instance d'un objet) en essayant de créer WriteableBitmap