2008-11-12 5 views
4

필자가 작성한 .NET CF 응용 프로그램 중 하나는 원격 카메라에서 프레임을 가져 오는 것입니다. 프레임은 단일 JPEG 이미지로 수집되어 사용 가능한 경우 화면에 표시됩니다. 다운로드하는 데 필요한 시간보다훨씬 훨씬 훨씬 더 큰 Compact Framework - Image.FromStream (Stream, Boolean, Boolean)의 모든 구현은 무엇입니까?

그것은 충분히 좋은 솔루션을했다,하지만 난 시간이 Bitmap() 생성자와 더불어, Image 객체로 스트림을 변환하는 데 필요한 사실을 좋아하지 않는다 스트림.

일부 블로그에서이 문제를 검색 할 때 일부 개발자가 validateImageData 플래그가있는 Image.FromStream() 메서드를 사용하고있는 것으로 확인되었습니다.이 플래그는 일부 유효성 검사 코드를 제어하는 ​​것으로 보입니다. validateImageData이 false이면 변환이 훨씬 빨라집니다.

좋은 생각이지만 .... Compact Framework는이 방법을 구현하지 않습니다!

아무도 그것을 피하는 방법이나 불필요한 지연없이 스트림을 Image으로 변환하는 방법을 아는 사람이 있습니까?

답변

1

OpenNETCF.Drawing.Imaging에는 스트림에서 이미지를 읽는 클래스가 있지만 이미지가 래핑 된 com 개체입니다. 그런 다음 IImage.Draw를 사용하여 비트 맵에 그릴 수 있습니다. 또한 장치에서 큰 jpeg의 크기 조정 된 이미지를 가져 오는 데 사용하는 GetThumbnail 메서드가 있습니다.

Here은 Alex Feinman의 블로그 게시물입니다.

+0

나는 OpenNETCF의 팬이 아니지만 한 번 사용해 보도록하겠습니다. 매트 감사합니다. – castle1971

+0

관심있는 클래스는 일부 COM 객체 주위의 래퍼이므로 원하는 경우 자신 만의 롤을 만들 수 있습니다. – Matt

1

JPEG의 크기가 큰 경우 (예 : 1200 x 1600 또는 그와 비슷한), Bitmap 생성자가있는 기기의 속도 문제 중 하나는 비트 맵의 ​​크기가 메모리에 만들어야하는 크기입니다 (비트 맵은 240 x 320 화면에 표시되는 경우에도 1200 x 1600이됩니다). 전체 크기가 아닌 이미 320 X 240 크기의 JPEG를 검색 할 수 있다면 비트 맵 생성 시간은 훨씬 적어야합니다.

Bitmap 생성자 이외의 누락 된 FromStream 메서드에 대한 대안을 찾을 수 없습니다. JPEG 형식에 익숙하다면 자신의 JPEG-BMP 변환기를 작성하기가 너무 어려울 것이라고 생각하지 않지만 Bitmap()보다 빠르지는 않을 것입니다.

편집 : 죄송합니다. 저는 압연 된 변환기가 240x320 JPEG를 240x320 비트 맵으로 변환하는 속도가 더 빠르지 않았 음을 의미했습니다. 전체 크기의 비트 맵을 먼저 만드는 단계를 건너 뛸 수 있기 때문에 훨씬 더 큰 JPEG를 240x320 비트 맵으로 변환하는 것이 훨씬 빨라질 것이라고 생각합니다.

+0

고맙겠지 만 이미지 크기는 작지만 (320x240) 변환의 성능은 여전히 ​​매우 느립니다 (비율로). – castle1971