2014-10-17 3 views
0

JavaFX에서 Canvas과 비슷한 이미지를 그리는 방법이 있습니까? 픽셀 단위가 아니지만 GraphicsContext2D과 같은 고급 드로잉 기능이 제공합니다. 다중 레이어 Canvas을 만들려고하고 있고, 새로운 레이어마다 다른 Canvas 구성 요소를 사용하면 잔인한 것처럼 보입니다. 아니면이 방법이 유일하고 바람직한 방법입니까?JavaFX 이미지로 그릴

답변

0

여러 canvas 인스턴스 (각 레이어에 하나씩)를 사용하면 (immediate draw API을 사용하여) 다층 캔버스를 만드는 것이 좋습니다. 레이어 화 된 캔버스 시스템을 생성하는 방법은 문서화되어 있으며 Oracle JavaFX tutorials: Working with Canvas: Creating a Simple Layer System에 실 렸습니다.

귀하의 다른 옵션은 모두 캔버스를 사용하지 될 수도 있지만 대신 Panes (레이어 당 하나의 창)의 내부에 적층되는 장면 그래프 노드를 두는 JavaFX scene graph (retained draw API)를 사용하고 레이어의 모든 배치 StackPane 안에 창유리. StackPane에서 노드 snapshot API를 호출하여 언제든지 결과 StackPane을 이미지로 변환 할 수 있습니다.

Canvas에서도 API가 유지되지 않습니까? 모든 연산은 모두 GrowableDataBuffer에 배치되고 이벤트에 렌더링되기 때문에?

네, 캔버스 API 즉시 그리기를 호출하는 것은 잘못된 이름입니다. 당신이 말하는대로 작동합니다. 그럼에도 불구하고 개념적으로 API를 즉각적으로 생각하는 것이 유용하다는 것을 알게되었습니다. API를 사용하는 개발자에게는 API가 사용되는 것처럼 보입니다. 초기 렌더링을 돕기 위해 보유 된 데이터 구조를 사용하는 구현 세부 사항입니다.

구현 디자인을 이해하는 한 캔버스에 드로잉 명령을 내릴 때 캔버스의 첫 번째 렌더링 pulse이 발생하면 명령이 버퍼에 배치되고 버퍼가 이미지 텍스처로 플러시됩니다. 따라서 명령은 첫 번째 렌더 이벤트까지만 내부 구현에만 유지됩니다. 후속 펄스에서 추가 캔버스 그리기 명령을 실행하면 해당 추가 명령이 버퍼링 된 후 다음 펄스의 렌더링 단계에서 플러시됩니다.

예를 들어, 캔버스에 대해 한 번의 펄스로 1 백만 개의 그리기 명령을 실행하면 해당 명령이 버퍼링 된 다음 렌더링 될 때 일시 중지가 표시되지만 화면이 백만 번 점진적으로 업데이트되는 것을 볼 수 없습니다 , 단지 하나의 업데이트. 1 백만 명령의 10 펄스에서 1,000 만 개의 그리기 명령을 실행하면 화면 업데이트가 10 번 표시됩니다. 이러한 동작을 보려면 매우 많은 수의 그리기 명령을 캔버스에 실행해야합니다.

detailed performance analysis of a JavaFX application을 수행하는 경우 성능 결과를 올바르게 이해하려면 구현을 이해하는 것이 중요하지만 그렇지 않으면 걱정할 필요가없는 내용입니다. 이 구현 세부 사항이 프로젝트에 심각한 성능 영향을 미칠 가능성은 거의 없습니다.

+0

Canvas에도 API가 보관되어 있지 않습니까? 모든 연산은 모두 GrowableDataBuffer에 배치되고 이벤트에 렌더링되기 때문에? –

관련 문제