2011-11-07 3 views
1

현재 스케일링/자르기 등을 사용하여 메터 프로젝트 투영 된 세계지도에서 예측 된 위성 발자국을 그릴 필요가있는 프로젝트에서 작업 중입니다. 지도를 완성했다.카이로를 사용하여 SWING 표면 (예 : JPanel)에 렌더링

나는 카이로가이 목적에 사용할 좋은 라이브러리라고 생각했다. 사용할 수있는 Java 바인딩이 있습니다. 그러나 SWING GUI (예 : JPanel 표면에 렌더링)로 렌더링하는 방법을 찾지 못했습니다. 나는 바이트 버퍼로 렌더링에 대해 생각하고 그것을 픽셀로 Java2D를 사용하여 픽셀로 음모를 꾸미지 만, 카이로를 버퍼로 렌더링하는 API 호출을 찾을 수 없습니다. (이것이 이상한 것입니다. 이것은 가장 기본적인 기능 중 하나입니다. 그러한 도서관이 지원받을 것으로 기대됨).

나는 이것을 얻을 수있는 어떤 방법이라도? 나는 Java2D가 있다는 것을 알고 있지만, 그것은 상당히 기본이다. 이 목적을 위해 더욱 강력하고 광범위하며 잘 테스트 된 고품질의 무료 (LGPL) 그래픽 라이브러리에 정말 감사드립니다. 어떻게 든 SWING과 함께 할 수 있다면 카이로는 완벽한 피팅이 될 것입니다.

제안 해 주셔서 감사합니다.

+0

일반적으로 원하는 구성 요소 (예 : JPanel)를 사용하고 '.getGraphics()'를 호출하여 해당 구성 요소의 렌더링 가능한 'Graphics' 객체를 가져옵니다. 그런 다음 해당'Graphics' 객체를 사용하여 렌더링을 수행합니다. 너 뭐 벌써 해봤 니? 당신의 질문은 당신이 이미 시도한 것을 말하지 않습니까? 자습서 (http://download.oracle.com/javase/tutorial/2d/index.html)를 이미 읽었습니까? – jefflunt

+0

@normalocity : 렌더링 자체에 Cairo (http://cairographics.org/)를 사용하고 싶습니다. Java2D API보다 훨씬 강력하고 편리합니다. 카이로에 대한 자바 바인딩의 API는 다음과 같이 문서화되어있다. [link] (http://java-gnome.sourceforge.net/doc/api/4.1/org/freedesktop/cairo/package-summary.html) SWING 구성 요소 (예 : JPanel) 또는 바이트 버퍼로 렌더링 할 수 있습니다.후자의 경우 카이로가 만든 래스터 렌더링을 Java2D를 사용하여 플롯 할 수 있습니다. 하지만 API에 의해 노출 된 "버퍼로 렌더링"기능은 보이지 않습니다. –

+0

이 [Java지도 투영 라이브러리] (http://www.jhlabs.com/java/maps/proj/index.html)도 참조하십시오. – trashgod

답변

3

카이로의 기본 요소 중 하나는 비 추상적 인 이미지 컨텍스트가 지원되는 백엔드 중 하나에 바인딩된다는 것입니다. Java 바인딩을 시도한 적이 없지만 얇은 레이어 일 가능성이 높습니다. 새로운 표면 유형을 제공하지 않을 가능성이 있습니다. "이미지 표면"유형을 사용해야합니다. 버퍼 한 ACESS을주는 : 라이브러리의 C 문서에

은 ( http://cairographics.org/manual/cairo-Image-Surfaces.html 여기) 을 부르는 "() cairo_image_surface_get_data"가있다. 아마도 바인딩은 실제로 내용을 사용하는 데 필요한 저수준 메모리 액세스 때문에이 코드를 Java에 노출시키지 않았을 수 있습니다. 그것이 사실이라면 다음과 같은 해결 방법을 제안합니다 :

(1) 카이로 이미지 표면에 결과 렌더링, (2) 표면 내용이있는 임시 파일 쓰기, (3) Java 2D API를 사용하는 임시 파일.

1

여기는 example입니다. 이 예제를 찾았습니다 http://java-gnome.sourceforge.net gtk 윈도우를 만들고 실제로는 gtk DrawingArea 위젯 onDraw() 이벤트는 cairo를 사용합니다. 나는 그것을 컴파일하고 리눅스에서 실행한다.

그러나 java-gnome은 리눅스 바이너리 만있는 것처럼 보입니다. 어쩌면 누군가가 윈도우 바이너리를 만들 수 있지만, 약간의 작업이 필요합니다.

gtk 창이므로 스윙과 관련이 없습니다. gtk (java-gnome)이 필요에 맞으면 스윙이 필요하지 않을 수도 있습니다.

스윙을 사용해야하는 경우 cairo를 사용하여 메모리의 이미지로 렌더링 한 다음 paintComponent() 메서드를 재정의하는 등의 방법으로 Jooman에 표시 할 수 있습니다. 나는 그 성과를 모른다.

관련 문제