문제

여기에 System.Drawing.Image 인스턴스를 생성하는 방법이 있습니다.다음 전제 조건을 고려하십시오.

  • 메소드 매개 변수 로 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)
    {
       ///[..]
    }
    
    .

    아이디어가 있습니까?

    미리 감사드립니다!

도움이 되었습니까?

해결책

이미 표시 한 것처럼 BITMAPSOURCE는 여러 프레임을 지원하지 않습니다.아마도 TIFF가 디코딩되고 모든 프레임에서 이미지를 변환하는 지점에서 단계를 수행하는 옵션이 될 것입니다.

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]));
}
.

위의 코드를 테스트하지 않았으므로 결함을 유감스럽게 생각합니다.

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