Следующий код считывает изображение и центрирует (вырезает и копирует) это изображение в результирующее изображение с черной рамкой и возвращает новое изображение.
Могу ли я сделать это без использования класса writeablebitmap?
private async Task<WriteableBitmap> FrameToCenter(StorageFile image, Size newSize)
{
WriteableBitmap result = new WriteableBitmap((int) newSize.Width,(int) newSize.Height);
WriteableBitmap bitmapToFrame = await StorageFileToSoftwareBitmap(image);
Rect sourceRect = new Rect(0, 0, bitmapToFrame.PixelWidth, bitmapToFrame.PixelHeight);
int a = (int) Math.Min(newSize.Height, newSize.Width);
Rect destRect = new Rect((int) ((_screenResolution.Width - _screenResolution.Height)/2), 0, a, a);
result.Blit(destRect, bitmapToFrame, sourceRect);
return result;
}
Все работало нормально, но затем я попытался поместить этот код в BackgroundTask в UWP, что привело к исключению из-за того, что я не могу использовать WriteableBitmap в другом потоке, отличном от потока пользовательского интерфейса.
Есть ли что-нибудь еще, что я могу сделать? Однако мне нужно запустить его в фоновом режиме.
А также строчка:
result.Blit(destRect, bitmapToFrame, sourceRect);
на самом деле использует расширение WriteableBitmapEx, которое я не смогу использовать. Любым другим путем? Я действительно не вижу способа манипулировать растровым изображением в потоке фоновой задачи. Я тихо потерялся здесь. Я даже думал об использовании библиотеки openCV и просто сделал это на С++, решит ли это проблему?
Также есть эти SO Q&A, в которых упоминается, что я должен получить фоновую задачу из класс XamlRenderingBackgroundTask. Как я могу это сделать?