Bonjour,
Je vous sollicite pour un problème que je rencontre lors de l'envoie d'une image par TCP.
L'image en question est transmise depuis une application Silverlight, elle transite sur un serveur développé en C# chargé de router le flux TCP, et elle arrive enfin sur un deuxième client Silvelright mais cette fois complètement décalé. C'est à dire que lors de son import sur le rectangle (avec rectangle.Fill), une partie de l'image se décale sur la droite. Et ceci de façon aléatoire : parfois le quart de l'image, parfois la moitié ...
J'ai fait une capture d'écran pour mieux vous décrire le problème.
Vous remarquerez également un léger décalage en hauteur.
(si l'image ne passe pas ici, cf pièces jointes)
Pour la préparation de l'envoi j'utilise :
Et j'utilise également la fonction ToByteArray pour la convertir avant l'envoi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 WriteableBitmap monImage = new WriteableBitmap(rectangleEnvoi, null);
Pour la réception :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 ToByteArray(monImage); public static byte[] ToByteArray(this WriteableBitmap bmp) { int[] p = bmp.Pixels; int len = p.Length * 4; byte[] result = new byte[len]; // ARGB Buffer.BlockCopy(p, 0, result, 0, len); return result; }
J'ai un buffer en entrée que je converti en WriteableBitmap avec la fonction FromByteArray.
Ensuite je crait mon ImageBrush
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 WriteableBitmap monImage = new WriteableBitmap(160,160); public static void FromByteArray(this WriteableBitmap bmp, byte[] buffer) { Buffer.BlockCopy(buffer, 0, bmp.Pixels, 0, buffer.Length); }
Je tiens à préciser que les 2 rectangles sont de la même largeur*longueur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ImageBrush monBrush = new ImageBrush(); monBrush.ImageSource = monImage ; monRectangle.Fill = monBrush ;
Une idée ? Merci par avance pour vos réponses.
Partager