Bonjour à vous tous,
J'ai une méthode qui redimensionne des images à l'aide du contrôle RadUpload de telerick et lorsque je tente de téléverser sur mon server 3 ou 4 images, les dernières avortent (voir l'image ci-jointe) avec le messagesur la ligneAccès inter-threads non valide(voir en gras et italique dans le code qui suit).
Code : Sélectionner tout - Visualiser dans une fenêtre à part BitmapImage bmp = new BitmapImage();
Par ailleurs, les premières images sont ok.
J'ai lu ceci (http://stackoverflow.com/questions/1...d-access-issue) mais je ne vois pas comment traiter mon image différemment. Une idée serait appréciée. De plus, cela marche pour les premières images chargent mais plate pour la dernière (et en plus elle n'est pas redimensionnée).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 private void RadUploadPhotosEspaceClos_FileUploadStarting(object sender, Telerik.Windows.Controls.FileUploadStartingEventArgs e) { RadUploadSelectedFile file = e.SelectedFile as RadUploadSelectedFile; WriteableBitmap wb; // Redimensionner l'image using (Stream stream = file.File.OpenRead()) { wb = ResizeImage(stream, 500); //resize the image to 500 pix } byte[] buffer; using (Stream Source = JpgEncoder.Encode(wb, 80)) { int bufferSize = Convert.ToInt32(Source.Length); buffer = new byte[bufferSize]; Source.Read(buffer, 0, bufferSize); } //NOTE: use the buffer to show the image... e.NewFileStream = new MemoryStream(buffer); } private WriteableBitmap ResizeImage(Stream stream, double targetSize) { BitmapImage bmp = new BitmapImage(); bmp.SetSource(stream); System.Windows.Controls.Image img = new System.Windows.Controls.Image(); img.Source = bmp; double scaleX = 1; double scaleY = 1; if (bmp.PixelHeight > targetSize) scaleY = targetSize / bmp.PixelHeight; if (bmp.PixelWidth > targetSize) scaleX = targetSize / bmp.PixelWidth; double scale = Math.Min(scaleY, scaleX); int newWidth = Convert.ToInt32(bmp.PixelWidth * scale); int newHeight = Convert.ToInt32(bmp.PixelHeight * scale); WriteableBitmap result = new WriteableBitmap(newWidth, newHeight); result.Render(img, new ScaleTransform() { ScaleX = scale, ScaleY = scale }); result.Invalidate(); return result; }
Partager