re-render frame on active calibration

This commit is contained in:
EugeneTes
2026-04-07 10:10:58 +02:00
parent bb861834fd
commit 371436d0c3

View File

@@ -130,17 +130,7 @@ public partial class CalibrationWindowViewModel : ObservableObject, IDisposable
_lastFrame?.Dispose(); _lastFrame?.Dispose();
_lastFrame = frame; _lastFrame = frame;
var displayFrame = frame; var bitmap = RenderFrame(frame);
if (ApplyCalibration && _calibCameraMatrix != null && _calibDistCoeffs != null)
{
displayFrame = new Mat();
Cv2.Undistort(frame, displayFrame, _calibCameraMatrix, _calibDistCoeffs);
}
var bitmap = ImageConverter.MatToAvaloniaBitmap(displayFrame);
if (displayFrame != frame)
displayFrame.Dispose();
await Dispatcher.UIThread.InvokeAsync(() => await Dispatcher.UIThread.InvokeAsync(() =>
{ {
@@ -162,6 +152,40 @@ public partial class CalibrationWindowViewModel : ObservableObject, IDisposable
} }
} }
private Avalonia.Media.Imaging.Bitmap RenderFrame(Mat frame)
{
var displayFrame = frame;
if (ApplyCalibration && _calibCameraMatrix != null && _calibDistCoeffs != null)
{
displayFrame = new Mat();
Cv2.Undistort(frame, displayFrame, _calibCameraMatrix, _calibDistCoeffs);
}
var bitmap = ImageConverter.MatToAvaloniaBitmap(displayFrame);
if (displayFrame != frame)
displayFrame.Dispose();
return bitmap;
}
partial void OnApplyCalibrationChanged(bool value)
{
if (_lastFrame == null || _lastFrame.Empty()) return;
try
{
var bitmap = RenderFrame(_lastFrame);
var old = PreviewImage;
PreviewImage = bitmap;
old?.Dispose();
}
catch (Exception ex)
{
StatusText = $"Preview error: {ex.Message}";
}
}
private void LoadCalibrationMats(Models.CalibrationData data) private void LoadCalibrationMats(Models.CalibrationData data)
{ {
_calibCameraMatrix?.Dispose(); _calibCameraMatrix?.Dispose();