Elvileg jó, meg a mentés is.

This commit is contained in:
2025-07-02 19:38:33 +02:00
parent 7f3562fb73
commit a646258837
6 changed files with 122 additions and 28 deletions
@@ -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;
}
}
}
@@ -1,12 +1,15 @@
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;
@@ -18,6 +21,7 @@ namespace WorkFlowCheck.MAUI.Pages.CheckList
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;
}
}
@@ -130,12 +130,12 @@
<Label Text="{Binding OperationDescription}" BackgroundColor="WhiteSmoke" Grid.Column="1" />
<Grid Grid.Column="2" ColumnDefinitions="Auto,Auto" VerticalOptions="Center">
<Image Grid.Column="0"
WidthRequest="95"
HeightRequest="120"
WidthRequest="65"
HeightRequest="90"
Aspect="AspectFill"
Margin="0,0,10,0"
VerticalOptions="Center"
Source="{Binding Photo}" >
Source="{Binding PhotoPath}" >
</Image>
<Button Text="📷" Grid.Column="1"
VerticalOptions="Center"
@@ -182,7 +182,7 @@ public partial class CheckListWorkPage : ContentPage
{
if (MediaPicker.IsCaptureSupported)
{
await OnSave(false);
//await OnSave(false);
var photo = await MediaPicker.CapturePhotoAsync();
if (photo != null)
{
@@ -196,7 +196,7 @@ public partial class CheckListWorkPage : ContentPage
checkListRowDTO.Answer = "Igen";
await _checkListService.UpdateCheckListRow(checkListRowDTO, true);
await LoadCheckPointCheckListRows();
//await LoadCheckPointCheckListRows();
}
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

@@ -166,11 +166,18 @@ namespace WorkFlowCheck.MAUI.Services
//.AsNoTracking()
.Where(w => w.Id == checkListRowDTO.Id).FirstOrDefaultAsync();
if (checkListRow != null)
{
if (checkListRow.Answer != checkListRowDTO.Answer)
{
checkListRow.Answer = checkListRowDTO.Answer;
}
if (checkListRowDTO.Photo != null && checkListRowDTO.Photo.Length > 0 && withPhoto)
{
checkListRow.Photo = checkListRowDTO.Photo;
if (!checkListRow.Photo.SequenceEqual(checkListRowDTO.Photo ?? Array.Empty<byte>()))
{
checkListRow.Photo = checkListRowDTO.Photo ?? Array.Empty<byte>();
}
}
await _dbContext.SaveChangesAsync();
}