BitmapSource를 이미지로 변환 모든 프레임 유지
-
14-11-2019 - |
문제
여기에 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]));
}
.
위의 코드를 테스트하지 않았으므로 결함을 유감스럽게 생각합니다.
제휴하지 않습니다 StackOverflow