2012-03-21 5 views
2

10-15 개의 BufferedImage를받는 Java SE 6 응용 프로그램이 있습니다.이미지 응용 프로그램 성능 향상

애플 리케이션은 C 프로그램이이를 읽고 이미지를 표시 할 수 있도록 이러한 BufferedImage를 공유 메모리에 작성해야합니다.

1900 * 1600에서 800 * 600까지 이미지가 큽니다. ImageIO를 사용하는 byte [] 변환은 시간이 오래 걸립니다. 가장 큰 이미지는 50ms입니다. 나는이 byte []가 메모리에 기록 할 필요가 있고 ImageIo는 내가 찾은 가장 빠른 방법이다. 내가 4 개 큰 이미지가있는 경우

, 그것은 이미지 :(

당신이 내가 그것을 개선 할 수있는 방법에 대해 어떤 생각을 가지고 있습니까 새로 고침 50 * 4 = 200 밀리 걸릴? 내가 약 1 이미지 1 개 스레드에 관심을 가져야 ? 나는 15 개 스레드가되고 CPU는 이미 ImageIO에서를 사용하여 이미지를 작성하는 대신 약 60 %

답변

0

을 노력하고 있습니다. 당신이에는 getPixels을 시도(). ImageIO에서는 TIFF와 같은 특정 코덱/MJPEG에 데이터를 기록합니다. 을 실제 데이터 (픽셀)가 필요한 것 이제 픽셀을 렌더링 할 수 있도록 C 코드를 작성해야합니다. 데이터를 C 코드로 전달할 계획입니까? 포인터 ???).

resumse : 여기서

+0


불행하게도 난 내 마지막 테스트를 완벽하게 :( 그것을 시도 할 시간이 없었다 너무 오래 시간을 기록, 3 백만의 크기가이 보인다, 놀랍게도 아래의 벤치 마크를 보면, getPixels는 좋은 응답 시간을 가지고 있습니다. 사람들이 프로세스를 개선하려고한다면 시도해보고 확인해야 할 것입니다. – Foobyto

0

내가 runned 기준 피드백 인 것이 ImageIO에서 이미지 처리를위한 가장 최적의 클래스 인 것으로 보인다.

공정 : BufferedImage의 => [] => 바이트 [] => INT [] =>
주 물품으로 바이트 : 바이트 변환 이미지 ImageIO에서를 사용하여, []

화상 1,900 * 1,600
BufferedImage의 바이트에서 []를 얻을 45 MS
캐스트 바이트를 byte [] [] EN : 0 단말기 메모리에 기록
MS

IMA
1024 * GE 1280의 BufferedImage에서 바이트 []를 얻을 20 23 MS
캐스트 바이트를 byte [] [] EN : 0 MS 메모리
쓰기 4 7 MS

이미지 800 * 600
는 BufferedImage의 행의 바이트 [] 얻을 9 밀리
캐스트 바이트를 byte [] [] EN : 0 MS Memoire의에
해주기 5 밀리

==> 선형 프로세싱은 최고의

프로세스 우리가 얻을 수 : BufferedImage의 => INT [] =>
노트를 작성 : INT로 변환 이미지를 getRGB를를 사용하는 [] * 1600 이미지 1900

: 2500 MS

==> getRGB를 각각의 이미지 픽셀을 얻을 : 너무 오래


프로세스 : 당신이 작성해야 3 백만 버피 feredImage => 래스터 =>의 DataBuffer =>의 BufferedImage에서 DataBuffer를 얻을

물품 : 0 MS Memoire의에
기록 2500 MS

화상 1,900 * 1,600 2500 MS

== >하는 DataBuffer,