TIFF 이미지의 바이트 배열을 가져 와서 System.Drawing.Image 객체로 바꾸려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/32750

  •  09-06-2019
  •  | 
  •  

문제

나는 그 내용이 TIFF 파일을 나타내는 byte[] 배열을 가지고 있습니다. 나중에 조작 할 수 있도록 System.Drawing.Image 객체로 변환합니다 (여러 페이지 TIFF 객체에 공급)

내가 가진 문제는이 작업에 대해 일반적으로 허용되는 코드입니다. 라코 디스

나에게 적합하지 않습니다. BinaryWriter 메서드를 호출하는 위 메서드의 두 번째 줄은 런타임에 죽습니다. 라코 디스

이 파일이 TIFF 파일이라는 사실 때문에이 방법이 질식하고 있다고 생각하지만 Image.FromStream 방법이이 사실을 받아들이도록하는 방법을 알 수 없습니다.

TIFF 이미지의 바이트 배열을 Image 객체로 어떻게 바꾸나요?

또한 내가 말했듯이 이것의 최종 목표는 다중 페이지 TIFF 파일을 나타내는 바이트 배열을 갖는 것입니다. 여기에는 현재 바이트 배열 개체가있는 TIFF 파일이 포함되어 있습니다. 이 작업을 수행하는 데 훨씬 더 나은 방법이 있다면 모든 것이 최선입니다.

도움이 되었습니까?

해결책

편집 : 아래 가정은 올바르지 않습니다. 나중에 IDE를 실행하고 Write를 사용하거나 사용하지 않고 테스트했으며 둘 다 MemoryStream을 올바르게 채웠습니다.

먼저 MemeoryStream에 글을 써야한다고 생각합니다.

내 기억 (말장난이 아님)이 제대로 된 것처럼 : 라코 디스

해당 크기의 메모리 스트림을 만듭니다.

그런 다음 바이트 배열 내용을 메모리 스트림에 기록해야합니다. 라코 디스

문제가 해결되는지 확인하세요.

다른 팁

좋아요. 문제를 발견했는데 제가 요청한 코드 부분과 관련이없는 코드 부분에서 발생했습니다.데이터는 문자열로 전달되었고,이를 바이트 배열로 변환하고 (테스트 장비 였으므로 메인 앱에서 얻는 바이트 배열을 시뮬레이션하려고했습니다) 그런 다음이를 MemoryStream으로 변환 한 다음그로부터의 이미지.

내가 깨닫지 못한 것은 문자열이 Base64로 인코딩되었다는 것입니다.Convert.FromBase64String()를 호출하면 Image.FromStream() 메서드를 죽이지 않는 바이트 배열로 바뀌 었습니다.

기본적으로 그것은 내 입장에서 어리석은 실수로 귀결되었습니다.그러나 위의 코드는 여전히 유용하며이 페이지는 다른 사람에게이 실수를 방지하는 방법에 대한 Google 결과로 제공 될 것입니다.

또한 내 바이트 배열에서 다중 페이지 TIFF를 구성하는 쉬운 방법을 찾았습니다. 여기 .

이 모든 것은 질문이 묻는 것과 같은 문제인 내 문제를 파악하는 데 도움이되는 단서였습니다. 그래서 나는 이러한 유용한 단서 때문에 도착한 내 솔루션을 게시하고 싶습니다. 지금까지 게시 된 모든 단서에 감사드립니다!

Time Saunders가 그의 답변에 게시했듯이 실제로 바이트를 메모리 스트림에 쓰는 Write 메서드는 필수적입니다. 그것은 나의 첫 번째 실수였습니다.

그때 제 데이터도 나쁜 TIFF 데이터 였지만 제 경우에는 이미지 데이터의 시작 부분에 추가 문자 13이있었습니다. 일단 제거하면 모두 잘 작동했습니다.

기본 TIFF 파일 형식 사양에 대해 읽었을 때 TIFF 파일은 II 또는 MM (값이 73 또는 77 인 2 바이트)로 시작해야한다는 것을 알았습니다. II는 리틀 엔디안 바이트 순서 ( '인텔 바이트 순서')가 사용됨을 의미합니다. MM은 빅 엔딩 ( 'Motorola 바이트 순서')이 사용됨을 의미합니다. 다음 2 바이트는 2 바이트 정수 값 (.NET의 경우 Int16) 42, 이진수 101010입니다.

따라서 올바른 TIFF 바이트 스트림은 십진수 바이트 값 73, 73, 42, 0 또는 77, 77, 0, 42로 시작합니다. 우리가 경험 한 것과 동일한 문제가있는 모든 사용자에게 TIFF 데이터 바이트를 검사하는 것이 좋습니다. 스트리밍하고 데이터가 유효한 TIFF 데이터인지 확인하십시오!

Schnapple과 Tim Saunders에게 감사합니다 !!

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