2016-06-10 5 views
0

다음 코드는 이미지를 읽고 해당 이미지를 검정색 프레임이있는 결과 이미지에 센터링 (잘라내어 복사)하고 새 이미지를 반환합니다.UWP - 백그라운드 작업에서 WriteableBimap을 사용하는 방법? 대체?

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; 
    } 

모든 것은 내가 사실 때문에 예외의 결과는 그때 다른 스레드 UI 스레드에서 WriteableBitmap 사용할 수 없다는 것을, UWP에 BackgroundTask에 그 코드를 삽입하려고 다음 잘 작동하지만.

내가 할 수 있는게 더 있습니까? 백그라운드 작업에서 실행해야합니다.

뿐만 아니라 라인 :

result.Blit(destRect, bitmapToFrame, sourceRect); 

실제로 내가 사용 할 수 없을 것입니다 WriteableBitmapEx 확장자를 사용하고 있습니다. 다른 방법이라도? 배경 작업 스레드에서 비트 맵을 조작하는 방법을 실제로 보지 못합니다. 나는 여기서 조용히 빠져있다. 나는 심지어 openCV 라이브러리를 사용하려고 생각해 왔으며 C++에서 그렇게했습니다. 문제가 해결 되었습니까?

this SO Q&A도 있는데, 이는 배경 작업을 XamlRenderingBackgroundTask class에서 가져와야한다고 언급합니다. 어떻게해야합니까?

답변

0

당신은 XamlBackgroundTask 같은 방법을 사용하면됩니다 일반 BackgroundTask

public sealed class MyBackgroundTask : XamlRenderingBackgroundTask 
{ 
    protected override async void OnRun(IBackgroundTaskInstance taskInstance) 
    { 
     var deferral = taskInstance.GetDeferral(); 
     //your code here 
     deferral.Complete(); 
    } 
} 

의 차이는 당신이 당신의 WriteableBitmap 사용할 수 있도록이 UI 스레드에 액세스 할 수 있다는 것입니다.

나는 단지 this 기사에서 중요한 권고 사항을 계속 지켜봐야 할 것입니다.

중요 백그라운드 작업의 메모리 사용량을 가능한 한 낮게 유지하려면이 작업을 Windows Phone 용 C++ Windows 런타임 구성 요소에 구현해야합니다. C#으로 작성된 경우 메모리 사용량이 높아지고 백그라운드 작업을 종료하는 메모리 부족 장치에서 메모리 부족 예외가 발생합니다. 메모리 제약에 대한 자세한 내용은 백그라운드 작업으로 앱 지원을 참조하십시오.

+0

내 작업이 봉인 된 클래스 인 경우 어떻게 상속합니까? 나는 그것을 얻지 않는다. – pijemcolu

+0

당신은 * 당신의 일을 상속받지 않습니다. 귀하의 작업은 XamlBackgroundRenderingTask에서 상속됩니다. – AlexDrenea