문제

저는 SWT 캔버스에서 임의로 색상이 지정된 픽셀을 플롯하는 빠르고 쉬운 방법을 찾고 있습니다.지금까지 나는 다음과 같은 것을 사용하고 있습니다.

// initialization:
GC gc = new GC(canvas);

// inside the drawing loop:
Color cc = new Color(display, r, g, b);
gc.setForeground(cc);
gc.drawPoint(x, y);
cc.dispose();

이것은 끔찍할 정도로 느립니다.300x300 캔버스를 픽셀로 채우는 데 약 1.5초가 걸립니다.화면 밖에서 이미지를 만들고 그 안에 픽셀을 설정한 다음 이미지를 그릴 수 있습니다.이것이 더 빠르겠지만 특히 캔버스에 이미지를 픽셀 단위로 그리는 점진적인 페인팅 효과를 원합니다.

도움이 되었습니까?

해결책

300x300 영역을 점차적으로 채우는 여러 개의 오프스크린 이미지를 그릴 수 있습니다.이렇게 하면 이미지가 표시되는 속도를 제어할 수 있습니다.

다른 팁

나는 성능을 죽이는 것이 90,000을 할당하고 방출한다고 확신합니다. Color 사물. SWT에서는 각각을 기억하십시오 Color 물체는 기본 자원을 할당하므로 dispose() 그것. 이것은 당신이 할당하고 처분 할 때마다 Color 객체, JVM에서 기본 코드로 전환해야합니다.

캐시 할 수 있습니까? Color 300x300 픽셀 루프에있는 동안 인스턴스를 한 다음 루프 후 객체를 폐기합니까? 당신은 최대 많은 객체 만 보유하는 다소 지능적인 캐시가 필요하며, 그 후에는 일부 항목을 처리 할 것이지만, 이로 인해 속도가 빨라질 것입니다. 매우.

BufferedImage 객체 만들기 :

BufferedImage bi = new new BufferedImage(300, 300, BufferedImage.TYPE_INT_RGB);

드로잉 루프 내부 픽셀을 설정합니다.

bi.setRGB(x, y, int_rgb);
...

마지막으로 버퍼링 된 이미지를 표시합니다.

g.drawImage(bi, 0, 0, null); 

setrgb ()가 느리면 비트 맵 데이터에 직접 액세스 할 수 있습니다.

int[] raster = ((DataBufferInt)bi.getRaster().getDataBuffer()).getData();

그리고 나중에

raster[y * 300 + x] = int_rgb;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top