From aa0004ec07a4d7f37f81af4fc814d7a6e5b25ac5 Mon Sep 17 00:00:00 2001 From: LynJet <104435916+LynJet@users.noreply.github.com> Date: Fri, 3 Jun 2022 16:40:47 +0200 Subject: [PATCH] Verschickte Bilder werden jetzt korrekt rotiert angezeigt. Die Synchronisation der Kontaktliste nach dem Senden einer Nachricht wird korrekt aktualisiert. --- ChatController/ChatMainControl.xaml.cs | 2 ++ ChatController/HauptKlassen/Chat.cs | 10 +++--- ChatController/Utilities/Utils.cs | 46 +++++++++++++++++++------ PrototypChat/.vs/PrototypChat/v16/.suo | Bin 265216 -> 265216 bytes 4 files changed, 43 insertions(+), 15 deletions(-) diff --git a/ChatController/ChatMainControl.xaml.cs b/ChatController/ChatMainControl.xaml.cs index 4276c6a..1a57df4 100644 --- a/ChatController/ChatMainControl.xaml.cs +++ b/ChatController/ChatMainControl.xaml.cs @@ -642,6 +642,8 @@ namespace ChatController Chatbox.Text = string.Empty; + Thread.Sleep(500); + DoSynchro(); } } diff --git a/ChatController/HauptKlassen/Chat.cs b/ChatController/HauptKlassen/Chat.cs index d852898..06ad221 100644 --- a/ChatController/HauptKlassen/Chat.cs +++ b/ChatController/HauptKlassen/Chat.cs @@ -919,16 +919,16 @@ namespace ChatController.HauptKlassen var windowMaxWidth = imageWidth; var windowMaxHeight = imageHeight; - if (windowMaxWidth > primaryScreenWidth2 || windowMaxHeight > primaryScreenHeight2) + if(windowMaxWidth > .8 * primaryScreenWidth2 || windowMaxHeight > .8 * primaryScreenHeight2) { - if (primaryScreenWidth2 > primaryScreenHeight2) + if(primaryScreenWidth2 > primaryScreenHeight2) { - windowMaxHeight = (int)(.9 * primaryScreenHeight2); + windowMaxHeight = (int)(.8 * primaryScreenHeight2); windowMaxWidth = (int)(windowMaxHeight * imageAspectRatio); } else { - windowMaxWidth = (int)(.9 * primaryScreenWidth2); + windowMaxWidth = (int)(.8 * primaryScreenWidth2); windowMaxHeight = (int)(windowMaxWidth * imageAspectRatio); } } @@ -978,7 +978,7 @@ namespace ChatController.HauptKlassen public void ShowPicture(string originalImage, long groupId, Action downloadCompletedCallback) { - if(originalImage == null) + if(originalImage is null) { return; } diff --git a/ChatController/Utilities/Utils.cs b/ChatController/Utilities/Utils.cs index d2da294..b2e2984 100644 --- a/ChatController/Utilities/Utils.cs +++ b/ChatController/Utilities/Utils.cs @@ -74,27 +74,53 @@ namespace ChatController.Utilities { ResponseWriter = stream => { - var bitmap = new BitmapImage(); + var rotation = Rotation.Rotate0; - var localStream = new MemoryStream(); + using(var image = Image.FromStream(stream)) + { + if(image.PropertyIdList.Contains(0x112)) + { + rotation = GetRotationFromExifTag(image.GetPropertyItem(0x112).Value[0]); + } - stream.CopyTo(localStream); + var bitmap = new BitmapImage(); - localStream.Position = 0; + var localStream = new MemoryStream(); - bitmap.BeginInit(); - bitmap.StreamSource = localStream; - bitmap.EndInit(); - bitmap.Freeze(); + image.Save(localStream, image.RawFormat); - callback?.Invoke(bitmap); + localStream.Position = 0; + + bitmap.BeginInit(); + bitmap.StreamSource = localStream; + bitmap.Rotation = rotation; + bitmap.EndInit(); + bitmap.Freeze(); + + callback?.Invoke(bitmap); + } } }; request.AddHeader(Constants.Token, AuthToken); request.AddHeader(Constants.CustomerId, Tenant); - client.ExecuteAsync(request, response => { /*Das übernimmt der ResponseWriter von oben*/ }); + client.ExecuteAsync(request, null); + } + + private static Rotation GetRotationFromExifTag(int value) + { + switch (value) + { + case 6: + return Rotation.Rotate90; + case 8: + return Rotation.Rotate270; + case 3: + return Rotation.Rotate180; + default: + return Rotation.Rotate0; + } } public static void DownloadImageAsync(string uri, string key, CacheCategory cacheCategory, Action callback) diff --git a/PrototypChat/.vs/PrototypChat/v16/.suo b/PrototypChat/.vs/PrototypChat/v16/.suo index bf8b3213baef83a24d9ad72bedd93f1f882e488d..b460b1d0131dfa6db12c7d264d3654be71d0a3e7 100644 GIT binary patch delta 14497 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 delta 16870 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