문제

필름 스트립과 같이 서로 옆에 작은 이미지를 많이 표시하는 Eclipse RCP 응용 프로그램이 있습니다. 각 이미지에 대해 SWT를 사용하고 있습니다 Image 물체. 이것은 과도한 양의 메모리와 리소스를 사용합니다. 나는 더 효율적인 방법을 찾고 있습니다. 나는이 이미지를 모두 가져 와서 ImageData 적절한 총, 합의 된 너비 (일정한 높이) 및 사용 setPixel() 나머지 픽셀의 경우. 그러나, 그 Palette 사용 ImageData 생성자 나는 알아낼 수 없습니다.

또한 이미지 그룹에서 하나의 이미지를 만들기 위해 SWT 타일링 또는 모자이크 기능을 검색했지만 아무것도 찾지 못했습니다.

서로 옆에 수천 개의 작은 이미지를 효율적으로 표시 할 수있는 아이디어가 있습니까? 이미지가 표시되면 조작되지 않으므로 일회성 비용입니다.

도움이 되었습니까?

해결책

새로운 (큰) 이미지의 GC (그래픽 컨텍스트)에 직접 그릴 수 있습니다. 하나의 큰 이미지가 있으면 수천 개의 작은 이미지보다 리소스 사용량이 훨씬 적어야합니다 (SWT의 각 이미지는 일부 OS 그래픽 객체 핸들을 유지합니다)

당신이 시도 할 수있는 것은 다음과 같습니다.

        final List<Image> images;
        final Image bigImage = new Image(Display.getCurrent(), combinedWidth, height);
        final GC gc = new GC(bigImage);
        //loop thru all the images while increasing x as necessary:
        int x = 0;
        int y = 0;
        for (Image curImage : images) {
            gc.drawImage(curImage, x, y);
            x += curImage.getBounds().width;
        }
        //very important to dispose GC!!!
                    gc.dispose();
        //now you can use bigImage

다른 팁

아마도 모든 이미지가 한 번에 화면에 보이는 것은 아니 었습니까? 아마도 더 나은 솔루션은 이미지가 가시가 될 때 (또는 또는 가보고있을 때만로드하여 화면에서 스크롤되었을 때 처분하는 것입니다. 분명히 사용자를 원활하게 전환하기 위해 현재 뷰포트의 양쪽에 몇 가지 메모리를 유지하고 싶을 것입니다.

이전에는 Java 응용 프로그램과 함께 광고 분야를 만들었으며 JAI (Java Imaging) 라이브러리 및 SWT를 사용하여 적절한 성능 및 메모리 사용을 달성하기가 매우 어렵다는 것을 알게되었습니다. 우리는 당신이 언급 한 것만 큼 많은 이미지를 사용하지 않았지만, 한 경로는 Java 이외의 유틸리티에 의존하는 것이 었습니다. 특히 imagemagick 명령 줄 유틸리티를 사용하여 모자이크를 꿰매고 디스크에서 완성 된 메모리를로드 할 수 있습니다. 공상을 원한다면 imagemagick에 대한 C ++ API도 있습니다. 이는 메모리가 매우 효율적입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top