2014-07-14 3 views
0
 using (Tiff iimage = Tiff.Open("new.tif", "r")) 
     { 
      Tiff newiimage = Tiff.Open("newnew.tif", "w"); 
      if (image == null) 
      { 
       MessageBox.Show("Could not open incoming image"); 
       return; 
      } 

      using (StreamWriter writer = new StreamWriter("EnumerateTiffTags.txt")) 
      { 
       short numberOfDirectories = iimage.NumberOfDirectories(); 
       for (short d = 0; d < numberOfDirectories; ++d) 
       { 
       iimage.SetDirectory((short)d); 

       for (ushort t = ushort.MinValue; t < ushort.MaxValue; ++t) 
       { 
        TiffTag tag = (TiffTag)t; 
        var value = iimage.GetField(tag); 
        if (value != null) 
        { 
        for (int j = 0; j < value.Length; j++) 
        { 
         writer.WriteLine("{0}", tag.ToString()); 
         writer.WriteLine("{0} : {1}", 
          value[j].Value.GetType().ToString(), value[j].ToString()); 
        } 
        newiimage.SetField(tag, value);// this line is giving me.. 
    // an error "Unable to cast object of type 'BitMiracle.LibTiff.Classic.FieldValue[]' 
    // to type 'System.IConvertible'" 
        } 
       } 
      } 
     } 
    } 

파일을 열어 다른 TIFF 파일에 쓰는 중입니다. 이 문제는 SetField 함수에서 발생합니다. 나는 그것을 디버깅 해봤는데, 모든 것이 잘 될 것 같은데, 왜 그럴 수 있는지, 왜 오류를 던지고 있는지를 알 수 없다.Libtiff를 사용하여 TIFF 이미지 복사

답변

1

: 그래서 당신이 뭔가를 시도 할 수 있습니다.

TiffTag.JPEGQUALITY는 의사 태그의 예입니다.

의사 태그를 설정할 수 없으므로 의사 태그를 쓰기 루프에서 제외해야합니다.

Well-known tags의 목록은 필터를 작성하는 데 도움이 될 수 있습니다 ..

또한 필터가 더 완벽하게 기록 할 수없는 태그를 쓸 필요가있다.

내가 의사 태그의 정확한 본질을 알고 있지만, TIFF 형식의 개방성을 부여하지 않습니다, 당신은 답장을

+0

정보를 주셔서 감사합니다 .... 태그를 복사하여 TIFF 이미지를 복사하는 것은 생각만큼 간단하지 않습니다. – harsha217

+0

음, 처음에는 SetField를 래핑하려고 할 수 있습니다. try-catch 블록에 넣고 실패 태그를 로그/기록하여 실제로 pseudo-tag인지 확인합니다. – TaW

+0

귀하의 아이디어는 그들을 필터링하는 데 도움이되었습니다. 그래서, 나는 하나 더 질문한다. 가짜 태그 (압축, Photometric, ResUnit, 내 이미지에서 등)를 설정하는 방법? 우리는 모두 수동으로 설정해야합니까? – harsha217

1

내가 SetField 메서드를 사용하고있는 LibTiff에서 FieldValue 개체가 아니라 실제 값이 필요합니다. 그것의 반환 세트 모두 실제 및 가상 태그가있는 GetField 방법의 문서에 따르면

newiimage.SetField(tag, value.Select(v => v.Value).ToArray()); 
+0

덕분에 .. 아마 unexepected 늦게 올 사람에 대한 오류 처리를 포함하는 잘하시기 바랍니다. 그래서, 솔루션의 "가치"의 데이터 유형은 무엇입니까? 모든 태그를 추출하고 복사하려고했기 때문에 "가치"가 될 수 있습니다. 맞습니까? 사면 내 접근 방식이 순진 해 보이는 경우 – harsha217

관련 문제