From a64625883745594226e69d3a42e48c0437631e4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Szab=C3=B3?= Date: Wed, 2 Jul 2025 19:38:33 +0200 Subject: [PATCH] =?UTF-8?q?Elvileg=20j=C3=B3,=20meg=20a=20ment=C3=A9s=20is?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WorkFlowCheck.MAUI/Helper/ImageHelper.cs | 62 ++++++++++++++++ .../Pages/CheckList/CheckListRowCS.cs | 67 ++++++++++++------ .../Pages/CheckList/CheckListWorkPage.xaml | 6 +- .../Pages/CheckList/CheckListWorkPage.xaml.cs | 4 +- .../Resources/Images/noimage.png | Bin 6137 -> 2214 bytes .../Services/CheckListService.cs | 11 ++- 6 files changed, 122 insertions(+), 28 deletions(-) create mode 100644 src/WorkFlowCheck.MAUI/Helper/ImageHelper.cs diff --git a/src/WorkFlowCheck.MAUI/Helper/ImageHelper.cs b/src/WorkFlowCheck.MAUI/Helper/ImageHelper.cs new file mode 100644 index 0000000..9c0f0cc --- /dev/null +++ b/src/WorkFlowCheck.MAUI/Helper/ImageHelper.cs @@ -0,0 +1,62 @@ +using SkiaSharp; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WorkFlowCheck.MAUI.Helper +{ + public static class ImageHelper + { + public static string ResizeAndSaveImage(byte[] imageBytes, int id, int targetWidth = 50) + { + // Átméretezett fájl elérési útja + var filename = Path.Combine(FileSystem.CacheDirectory, $"wfc_{id}_photo.jpg"); + + if (File.Exists(filename)) + { + try + { + File.Delete(filename); + // opcionálisan logolhatsz + // Console.WriteLine($"Törölve: {filename}"); + } + catch (Exception ex) + { + //Console.WriteLine($"Hiba a fájl törlésekor: {ex.Message}"); + } + } + + // Eredeti kép betöltése + using var inputStream = new MemoryStream(imageBytes); + using var original = SKBitmap.Decode(inputStream); + + if (original == null) + throw new InvalidOperationException("A kép nem olvasható vagy hibás."); + + // Új szélesség és magasság arányosan + + int targetHeight = (int)(original.Height * ((double)targetWidth / original.Width)); + + // Új üres bitmap létrehozása + using var resizedSurface = SKSurface.Create(new SKImageInfo(targetWidth, targetHeight)); + using var canvas = resizedSurface.Canvas; + + canvas.Clear(SKColors.White); // választható háttérszín + + var srcRect = new SKRect(0, 0, original.Width, original.Height); + var destRect = new SKRect(0, 0, targetWidth, targetHeight); + canvas.DrawBitmap(original, srcRect, destRect); + + using var resizedImage = resizedSurface.Snapshot(); + using var imageData = resizedImage.Encode(SKEncodedImageFormat.Jpeg, 90); + + // Mentés fájlba + using var fileStream = File.OpenWrite(filename); + imageData.SaveTo(fileStream); + + return filename; + } + } +} diff --git a/src/WorkFlowCheck.MAUI/Pages/CheckList/CheckListRowCS.cs b/src/WorkFlowCheck.MAUI/Pages/CheckList/CheckListRowCS.cs index 87756c7..57a3021 100644 --- a/src/WorkFlowCheck.MAUI/Pages/CheckList/CheckListRowCS.cs +++ b/src/WorkFlowCheck.MAUI/Pages/CheckList/CheckListRowCS.cs @@ -1,23 +1,27 @@ -using System.ComponentModel; +using SkiaSharp; +using System.ComponentModel; using WorkFlowCheck.Common.DTO; +using WorkFlowCheck.MAUI.Helper; namespace WorkFlowCheck.MAUI.Pages.CheckList { public class CheckListRowCS : INotifyPropertyChanged { private byte[] _photoBytes; - private ImageSource? _photo; + //private ImageSource? _photo; + private string? _photoPath; public event PropertyChangedEventHandler PropertyChanged; - + public int Id { get; set; } - public string AnswerType { get; set; } = null!; + public string AnswerType { get; set; } = null!; public int RowIndex { get; set; } public string OperationDescription { get; set; } = null!; public string GroupName { get; set; } = null!; public string Answer { get; set; } = null!; public bool? AnswerYes { get; set; } = null!; public bool? AnswerNo { get; set; } = null!; + public byte[] PhotoBytes { get => _photoBytes; @@ -26,37 +30,58 @@ namespace WorkFlowCheck.MAUI.Pages.CheckList if (_photoBytes != value) { _photoBytes = value; - _photo = null; - OnPropertyChanged(nameof(PhotoBytes)); - OnPropertyChanged(nameof(Photo)); + //_photo = null; + _photoPath = null; + //OnPropertyChanged(nameof(PhotoBytes)); + //OnPropertyChanged(nameof(Photo)); + OnPropertyChanged(nameof(PhotoPath)); } } } - public ImageSource Photo + //public ImageSource Photo + //{ + // get + // { + // if (_photo == null) + // { + // if (PhotoBytes != null && PhotoBytes.Length > 0) + // { + // try + // { + // var bytesCopy = PhotoBytes.ToArray(); + // _photo = ImageSource.FromStream(() => new MemoryStream(bytesCopy)); + // } + // catch + // { + // _photo = ImageSource.FromFile("noimage.png"); + // } + // } + // else + // { + // _photo = ImageSource.FromFile("noimage.png"); + // } + // } + + // return _photo; + // } + //} + + public string PhotoPath { get { - if (_photo == null) + if (_photoPath == null) { if (PhotoBytes != null && PhotoBytes.Length > 0) { - try - { - var bytesCopy = PhotoBytes.ToArray(); - _photo = ImageSource.FromStream(() => new MemoryStream(bytesCopy)); - } - catch - { - _photo = ImageSource.FromFile("noimage.png"); - } + _photoPath = ImageHelper.ResizeAndSaveImage(PhotoBytes, Id, 100); } else { - _photo = ImageSource.FromFile("noimage.png"); + _photoPath = "noimage.png"; } } - - return _photo; + return _photoPath; } } diff --git a/src/WorkFlowCheck.MAUI/Pages/CheckList/CheckListWorkPage.xaml b/src/WorkFlowCheck.MAUI/Pages/CheckList/CheckListWorkPage.xaml index e477a95..6e7421f 100644 --- a/src/WorkFlowCheck.MAUI/Pages/CheckList/CheckListWorkPage.xaml +++ b/src/WorkFlowCheck.MAUI/Pages/CheckList/CheckListWorkPage.xaml @@ -130,12 +130,12 @@