2013-08-07 3 views
3

JavaFX Canvas가 포함 된 Object가 있고 이미지를 표시합니다. 예를 들어 4000 x 4000 크기의 매우 큰 이미지의 경우 캔버스는 많은 메모리를 소비합니다.Canvas 메모리는 어떻게 무료로 사용할 수 있습니까?

콘텐츠를 지우고 나중에 다시 사용하고 싶습니다. 어떻게해야합니까? 도움이되지 않습니다 다음을 시도

: 당신은 더 이상 이미지 개체에 대한 참조가없는 경우

canvas.getGraphicsContext2D().clearRect(0, 0, getImage().getWidth(), getImage().getHeight());

답변

2

리소스를 해제하기 위해 Canvas에 메소드를 추가하는 것과 관련된 openjfx-dev mailing list에 대한 최근 토론이있었습니다. 이러한 기능은 구현 된 경우 향후 JavaFX 릴리스까지 사용할 수 없습니다.

이전에 참조 된 스레드의 결과로 다음 플랫폼 팅겨보기 요청이 생성되었습니다 : RT-32242 Canvas should clear its buffered commands on certain clearRect, fillRect calls (현재 Java 8 릴리스 구현 예정).

구현 될 때까지 새 Canvas 노드를 만들고 이전 Canvas 노드를 새 노드로 바꿔야 할 수 있습니다.

캔버스만큼 기능적이지는 않지만, 아마도 WritableImage을 사용하는 것이 작업에 충분할 수 있으며 현재 Canvas에서 발생하는 것과 동일한 메모리 문제를 겪지 않을 수 있습니다. 이는 내부적으로 WritableImage가 히스토리 레코드가없는 픽셀 데이터의 버퍼 일 뿐이며 Canvas는 내부적으로 드로잉 명령에 대한 기록 레코드를 유지하기 때문입니다.

0

, 당신은 가비지 콜렉션이 실행될 때까지 기다려야 할 수도 있습니다. clearRect() 전화는 기존 이미지를 배경색으로 채 웁니다.

관련 문제