2016-10-14 3 views
0

코드 샘플이 좋지만이 상황을 처리하는 가장 좋은 방법에 대한 일반적인 조언 만 있으면 충분합니다.UWP/Win2D - 메모리에 드로잉 저장

Win2D Canvas에서 이미지를 렌더링하고 있습니다. 이미지는 먼저 타일 비트 맵을 결합하여 큰 이미지를 만듭니다. "Base Image"라고 부를 것입니다.

그런 다음 다양한 "그리기"호출을 사용하여 기본 이미지를 마크 업하고 기본 이미지 위에 다른 비트 맵을 배치하여 최종 이미지를 만듭니다.

사용자는 이미지를 원하는 방향으로 스크롤하거나 확대/축소 할 수 있습니다. 마우스 움직임이 추적되고 사용자에게 자세한 정보를 제공하기 위해 툴팁과 같은 도구가 캔버스 위에 표시됩니다. 사용자가 이미지에 영향을주는 모든 작업을 수행 할 때마다 전체 이미지를 다시 그려 보겠습니다. 경우에 따라 기본 이미지는 46,000 개의 작은 비트 맵으로 구성됩니다.

이 무거운 접근 방식을 사용해도 이미지는 매우 빠르게 재구성되지만 이는 가능한 한 최악의 방법이라고 느낍니다.

내 내장은 기본 이미지를 한 번 렌더링하고 메모리에 유지 한 다음 필요에 따라 캔버스에 복사해야한다고 말합니다. 그 후 이미지를 완성하는 데 필요한 비트를 오버레이합니다. 이 목적으로 인 메모리 비트 맵을 유지하는 방법을 제안하는 자료는 찾을 수 없습니다. 그것이 가장 적절한 접근법인지 나는 알지 못한다.

가장 적절한 조치 방법에 대한 안내 또는 제안 사항에 감사드립니다.

답변

2

당신의 본능을 확실히 바로 여기에있다 - 당신이 가장 가능성이 한 번만 이미지를 그리기 및 다음의 캐시 된 버전을 재사용하여 큰 성능 향상을 얻을 수 있습니다.

CanvasRenderTarget은이 문제를 해결하는 방법입니다. https://microsoft.github.io/Win2D/html/T_Microsoft_Graphics_Canvas_CanvasRenderTarget.htmhttps://microsoft.github.io/Win2D/html/Offscreen.htm을 출발점으로 사용하십시오.

+0

나는 전에 CanvasRenderTarget 클래스를 보았지만, "오프 스크린"기사는 갑자기 의미가 있다고 생각합니다. 나는 그것을 시도 할 것이다. –

+0

잘 작동하는 것처럼 보입니다. 생성 된 비트 맵을 "오프 스크린"리소스에 쉽게 구축 할 수 있으며 필요한 부분을 화면상의 리소스에 복사 할 수 있습니다. 나는 제한을 발견했다. 오프 스크린 이미지의 최대 너비 (및 높이도 가정하고 있음)는 16384를 초과 할 수 없습니다. 실제 오류는 "이 장치의 MaximumBitmapSizeInPixels는 16384입니다."입니다. 이것은 내가 필요로하는 크기의 약 1/4이지만, 제한은 또한 내가 만들고자하는 기본 크기가 너무 커서 합리적이지 않을 것이라고 말하고 있습니다. –

+0

참고는 16384 * 16384 비트 맵 (가정 32 비트 색상 형식)는 1GB 즉, GPU 하드웨어는 큰 이미지를 지원할 수있는 그래서 경우에도, 당신은 꽤 빠른 메모리가 부족할 것! –