2017-05-14 10 views
0

이미지의 각 픽셀에 부동 소수점 숫자가 포함 된 32 비트 회색조 TIFF 파일을 읽으려고했습니다. 그러나 읽기 프로세스 중에 버퍼 배열에는 각 픽셀에 대해 4 개의 값이 포함됩니다. 예를 들어 [픽셀 값 = 43.0 -> 픽셀 값 {0, 0, 44, 66}의 바이트 값]. 나는 float 픽셀 값과 바이트 값 사이의 관계를 이해할 수 없다. 또한 버퍼를 사용하여 이미지를 썼지 만 출력 이미지의 픽셀 값은 1073872896과 같은 int 값입니다. 어떤 제안이라도 감사하겠습니다.Libtiff.Net을 사용하여 32 비트 회색조 Tiff 읽기

using (Tiff input = Tiff.Open(@"E:\Sample_04.tif", "r")) 
     { 
      // get properties to use in writing output image file 
      int width = input.GetField(TiffTag.IMAGEWIDTH)[0].ToInt(); 
      int height = input.GetField(TiffTag.IMAGELENGTH)[0].ToInt(); 
      int samplesPerPixel = input.GetField(TiffTag.SAMPLESPERPIXEL)[0].ToInt(); 
      int bitsPerSample = input.GetField(TiffTag.BITSPERSAMPLE)[0].ToInt(); 
      int photo = input.GetField(TiffTag.PHOTOMETRIC)[0].ToInt(); 

      int scanlineSize = input.ScanlineSize(); 
      byte[][] buffer = new byte[height][]; 

      for (int i = 0; i < height; i++) 
      { 
       buffer[i] = new byte[scanlineSize]; 
       input.ReadScanline(buffer[i], i); 
      } 

     using (Tiff output = Tiff.Open("output.tif", "w")) 
       { 
        output.SetField(TiffTag.SAMPLESPERPIXEL, samplesPerPixel); 
        output.SetField(TiffTag.IMAGEWIDTH, width); 
        output.SetField(TiffTag.IMAGELENGTH, height); 
        output.SetField(TiffTag.BITSPERSAMPLE, bitsPerSample); 
        output.SetField(TiffTag.ROWSPERSTRIP, output.DefaultStripSize(0)); 
        output.SetField(TiffTag.PHOTOMETRIC, photo); 
        output.SetField(TiffTag.PLANARCONFIG, PlanarConfig.CONTIG); 
        output.SetField(TiffTag.COMPRESSION, compression); 

        int j = 0; 
        for (int i = 0; i < h; i++) 
        { 

         output.WriteScanline(buffer[i], j); 
         j++; 
        } 
       } 
     } 

업데이트 1 : 바이트 [] A = {0, 0, 44 : I는 다음과 같이 인 C#에서 BitConverter 클래스를 사용하여 4 바이트의 화소 값과의 관계를 발견

, 66} -> 43 = BitConverter.ToSingle (a, 0) 및 1110179840 = BitConverter.ToInt32 (a, 0). 바이트가 int32로 변환 된 것처럼 보입니다. 이제는 바이트 값을 float로 변환하는 방법에 대해 의문이 생깁니다.

업데이트 2 : 원래 TIFF 파일과 조각 코드를 작성 후 TIFF는 attached.Why는 엉망 출력 TIFF 파일되어왔다? Output tiff

+0

"이미지의 각 픽셀에 부동 소수점 숫자가 포함되어 있습니다"라는 것을 어떻게 알 수 있습니까? "픽셀 값 = 43.0"은 어디에서 왔습니까? –

+0

그리고 "출력 이미지의 픽셀 값은 1073872896과 같은 int 값입니다"라고 생각하게하는 요소는 무엇입니까? –

+0

질문에 답하기 위해 픽셀 값과 데이터 유형을 표시하기 위해 tiff 파일을 ArcMap으로 가져 왔습니다. –

답변

0

Input tiff

나는 부동 번호로 픽셀 값을 변환하는 코드 줄을 추가하고 그것을 잘 작동합니다.

output.SetField(TiffTag.SAMPLEFORMAT, SampleFormat.IEEEFP);