re-render frame on active calibration
This commit is contained in:
@@ -130,17 +130,7 @@ public partial class CalibrationWindowViewModel : ObservableObject, IDisposable
|
||||
_lastFrame?.Dispose();
|
||||
_lastFrame = 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();
|
||||
var bitmap = RenderFrame(frame);
|
||||
|
||||
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)
|
||||
{
|
||||
_calibCameraMatrix?.Dispose();
|
||||
|
||||
Reference in New Issue
Block a user