PDF 파일 저장 버그

게시판 IDL Q&A PDF 파일 저장 버그

4 답변 글타래를 보이고 있습니다
  • 글쓴이
    • #2819 Reply
      tlseorb0111
      회원

      안녕하세요
      IDL> data = findgen(500, 500)
      IDL> data[100:200, 100:200] = !values.f_nan
      IDL> i = image(data, rgb_table=33)

      위와같이 실행 후 이미지를 pdf로 저장시 그 결과가 이상하게 저장됩니다.
      eps도 마찬가지구요.
      data에 NaN을 넣지않고 pdf 저장을 하면 제대로 되는것 같은데요..
      해결 방법이 있을까요?
      IDL 8.5.1 버전이며 윈도우 8.1, 우분투 14.04 모두 pdf 저장이 이상하게 됩니다.

    • #2820 Reply
      mwkim
      회원

      말씀하신 것처럼 NaN값이 있을 때는 흑백으로 이상하게 저장되는 것 같습니다.

      아마 IDL> i.Save, ‘[파일이름].pdf’ 으로 저장하셨을 텐데

      /BITMAP 키워드를 사용하면 해결되는 것 같습니다.

      /BITMAP 키워드에 대한 설명은 IDL 도움말을 보시면 될 것 같고요…;;

      eps 파일은 확인해보지 않았지만 pdf 파일은 이 방법으로 해결되는 것 같습니다.

    • #2821 Reply
      tlseorb0111
      회원

      답변 감사합니다.

      말씀해주신 bitmap 키워드를 사용하면 그림이 제대로 저장됩니다.

      하지만 제가 필요한 것은 vector라 bitmap 키워드는 적절하지 않은 것같습니다.

      IDL 8 버전 초반 부터 pdf 저장은 자잘한 버그가 몇 있었는데 아직 많이 수정이 안된 것 같습니다.

      • #2822 Reply
        mwkim
        회원

        IMAGE 함수를 통해 표출된 내용에 대해서는 벡터로 저장하는 과정에서

        NaN 값에 대한 처리가 잘 안되는 것 같습니다.

        벡터 방식으로 저장하실려면 NaN 값을 제거해야 될 것 같습니다.
        (예를 들면 CopyWindow 메소드로 이미지를 저장하고 재 출력하거나,
        NaN 값 대신에 임의값을 지정하고 그 부분만 배경색과 동일하게 출력하는 방식 등)

        아무래도 벡터 형식의 저장 기능이 주로 사용되는 비트맵 파일 포맷에 비해서

        예외적으로 작동하는 부분이 있는 것 같습니다.

    • #2824 Reply
      Sangwoo
      회원

      이 문제는 아마 버그라고 보는 것이 맞을 것 같습니다. 일단 꼼수이긴 하지만 피해가는 방법이 있긴 한데요. 동일한 데이터에 대하여 다음과 같이 SURFACE 함수를 사용해서 surface 그래픽을 의도적으로 삽입한 후 보이지 않게 처리하는 방법입니다. 그러면 NaN 값이 있다 하더라도 벡터 포맷으로 저장하는데 문제가 없는 것으로 확인을 했습니다.

      sf = SURFACE(data, AXIS_STYLE=0, /CURRENT)
      sf.Hide = 1

      물론 왜 이 방법이 먹히는지는 저도 모릅니다. 하여간 버그인가에 대한 여부는 본사 기술팀에 문의를 해봐야 알 것 같지만, 금방 수정된다는 보장은 없으므로 당장은 위의 방법을 시도해보시길 권합니다.

    • #2825 Reply
      Sangwoo
      회원

      확인 결과 본사인 Harris에서도 이미 버그로 리포트가 되어 있는 사안입니다. 아마도 다음 버전에서는 수정이 될 것으로 기대합니다. 그리고 위의 댓글에서 언급했던 방법외에 또 다른 방법(어차피 임시방편이긴 하지만)이 있는데요. 일단 그림이 다 그려진 그래픽창의 내용을 캡쳐한 후 이를 별도의 그래픽창에 표출한 후 그것을 저장하는 방법입니다. 아래에 있는 예제 코드의 내용을 참조하시기 바랍니다.

      data = HANNING(500, 500)
      data[100:200, 100:200] = !values.f_nan
      win = WINDOW(DIMENSIONS=[500, 500])
      im = IMAGE(data, rgb_table=33, MARGIN=0, /CURRENT)

      여기까지는 올려주셨던 코드와 유사한 방식으로 재구성한 예제입니다. 여기서 win을 바로 PDF로 저장하면 문제가 생깁니다. 따라서 다음과 같이 이 그래픽창의 내용을 CopyWindow 메서드를 사용하여 캡쳐한 다음, 이 캡쳐를 별도의 그래픽창에 표출하고 이 그래픽창의 내용을 PDF로 저장하는 방식입니다.

      tmp = im.CopyWindow(WIDTH=500, HEIGHT=500)
      win_tmp = WINDOW(DIMENSIONS=[500, 500], /BUFFER)
      im_tmp = IMAGE(tmp, MARGIN=0, /CURRENT)
      win_tmp.Save, ‘pdf_save.pdf’

4 답변 글타래를 보이고 있습니다
'PDF 파일 저장 버그'에 답변달기
글쓴이 정보: