2012-01-26 7 views
1

여기에 System.Drawing.Image 인스턴스를 생성해야하는 메서드가 있습니다. 다음 prerequesites을 고려BitmapSource를 모든 프레임을 유지하는 이미지로 변환

  • 나는 당신이 이미지에 BitmapSource는에서 변환을 수행하는 코드를 찾을 수 아래의 방법 매개 변수
  • 로 BitmapSource는 얻을.

변환 :

public Image ConvertBitmapSourceToImage(BitmapSource input) 
{ 
    MemoryStream transportStream = new MemoryStream(); 
    BitmapEncoder enc = new BmpBitmapEncoder(); 
    enc.Frames.Add(BitmapFrame.Create(input)); 
    enc.Save(transportStream); 
    transportStream.Seek(0, SeekOrigin.Begin); 
    return Image.FromStream(transportStream); 
} 

는 이제 BitmapSource는이 멀티 페이지 tif 여야 파일에서 생성 된 상상한다. 내가해야 할 일은 코드에서 n 번째 페이지를 사용할 수있게하는 것입니다. BitmapSource 클래스는 이에 대한 지원을 제공하지 않으므로 첫 번째 프레임을 제외한 나머지 프레임을 입력에서 가져 오는 방법을 알고 있습니까? 또는 BitmapSource가 Tif 전체를 하나의 프레임으로 읽어 프레임 정보를 잃어 버렸습니까? 그것이 가능했던 경우

, 정말 좋아, 내 메소드 서명에 다른 매개 변수를 추가 할 수 있습니다

public Image ConvertBitmapSourceToImage(BitmapSource input, int frame) 
{ 
    ///[..] 
} 

어떤 아이디어를?

미리 감사드립니다.

+0

여러 이미지를 표시하거나 '내비게이션'하는 방법이 명확하지 않습니다. 그들은 마우스를 클릭하여 서로 겹치거나 나란히 놓여 있어야합니다. 이러한 다중 이미지 컨트롤이 사용되는 방법에 대한 정보를 조금 더 제공하십시오. – Clemens

+0

죄송합니다. 아마도 제대로 작성되지 않았을 것입니다. 현재 페이지 만 표시하고 Navigation은 PageSelection을 늘리거나 줄입니다. 따라서 탐색이 앞으로 진행될 때 첫 번째 이미지 대신 이미지의 두 번째 프레임을 표시하려고합니다. 이미지 클래스는 멀티 프레임을 지원하지만, 입력으로 얻는 것은 모두 (Multipage Tiff 파일에서 생성 된) BitmapSource뿐입니다. –

+1

[MSDN] (http://msdn.microsoft.com/en-us/library/system.windows.controls.image.aspx)에는 '다중 프레임 이미지를 표시 할 때 첫 번째 프레임 만 표시됩니다. 다중 프레임 이미지의 애니메이션은 이미지 컨트롤에 의해 지원되지 않습니다. 따라서 프레임 당 하나의 이미지를 만드는 것이 더 나을 것입니다. – Clemens

답변

0

이미 말했듯이 BitmapSource는 여러 프레임을 지원하지 않습니다.

TiffBitmapDecoder decoder = new TiffBitmapDecoder(...) // use stream or uri here 
System.Drawing.Image[] images = new System.Drawing.Image[decoder.Frames.Count]; 

for (int i = 0; i < decoder.Frames.Count; i++) 
{ 
    // use your converter function here 
    images[i] = ConvertBitmapSourceToImage(decoder.Frames[i])); 
} 

나는 위의 코드를 테스트하지 않았고, 어떤 결함에 대한 유감 : 아마도 모든 프레임에서 이미지를 TIFF가 디코딩되는 경우 지점에서의 단계로 변환하는 옵션이 될 것입니다.