Я использую Avalonia UI Framework для создания приложения MVVM ядра dotnet.
Я хочу отображать кадры из WebCam и создал простую модель WebCamViewModel:
public class WebCamViewModel : ViewModelBase
{
private Bitmap webCamImage;
public Bitmap WebCamImage
{
get { return webCamImage; }
private set { this.RaiseAndSetIfChanged(ref webCamImage, value); }
}
public WebCamViewModel(WebCamImageService webcamImageService)
{
webcamImageService.OnFrame += BitmapReceived;
}
public void BitmapReceived(Bitmap bitmap)
{
WebCamImage = bitmap;
}
}
Я попробовал наивный подход и избавился от старого растрового изображения следующим образом:
public void BitmapReceived(Bitmap bitmap)
{
if (webCamImage != null) webCamImage.Dispose();
WebCamImage = bitmap;
}
Я получаю System.NullReferenceException: ссылка на объект не установлена на экземпляр объекта. при изменении размера приложения. StackTrace
Как я могу правильно избавиться от старых экземпляров растровых изображений, чтобы от сборщика мусора не было особо много работы?
Есть ли лучший подход для отображения динамически изменяющегося содержимого изображения?
BitMap
отображается как свойство. Что можно прочитать из этого свойства? Что еще может иметь ссылку на этотBitMap
, который внезапно перестанет работать, если он будет удален? Чтобы безопасно избавиться от него, вы должны знать, что еще имеет ссылку на этот объект. - person Scott Hannen   schedule 15.09.2020Image
. - person kekekeks   schedule 16.09.2020