Sea mask Postscript format

게시판 IDL Q&A Sea mask Postscript format

태그: , , , ,

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

      그림을 그리다보니 해양 부분을 mask해야하는 경우가 생겼습니다.

      land의 경우 map_continent 함수의 /fill 으로 mask를 할 수가 있지만
      sea는 내장함수를 어떻게 이용해야할지 모르겠어서,
      TVRD를 이용해서 직접 mask를 만들어서 이용했습니다.

      그래서 결과물을 png 형식으로 출력했습니다만,
      파일을 png가아닌 postscript형식으로 출력해보고싶은데,

      이때 SET_PLOT, ‘PS’ 에서는 TVRD와 같이 윈도우에 출력되는 그림을 2차원혹은 3차원 배열(Truecolor)로 받을 수 있는 방법을 모르겠어서, 어떻게하면 mask를 만들 수 있는지 문의드립니다.

    • #2574 Reply
      Sangwoo
      회원

      컬러로 된 그림을 PS 형식으로 저장할 경우에는 시작과 끝이 다음과 같아야 합니다.

      SET_PLOT, ‘PS’
      DEVIDE, FILEMANE=’~~.ps’, COLOR=1, BITS_PER_PIXEL=8
      ~~~~ 각종 그림 그리는 명령들 ~~~~
      DEVICE, /CLOSE

      다만, PS는 그림의 위치 설정 등의 체계가 일반 그래픽창 모드와는 완전히 다르기 때문에, 페이지 기반의 각종 키워드들을 적절하게 사용하여 그림의 위치 등을 조정해야 한다는 점을 염두에 둬야 합니다. IDL 도움말에서 Environment > Miscellaneous Environment Topics > Supported Devices 에서 PS 링크로 들어가면 관련된 더 자세한 내용을 찾아볼 수 있습니다.

      • 이 답변은 Sangwoo에 의해 8 years, 7 months 전에 수정됐습니다.
    • #2576 Reply
      yook
      회원

      네 답변 감사합니다.

      bit_per_pixel=8 명령어를 이용해서 post script형식에서도 true color를 사용할 수 있는 것은 이제 이해가 되었습니다.

      그러나 제가 현재는,
      1. 먼저 다음과같이 window로 그림을 그리고
      window, xsize=xa4, ysize=ya4,/pixmap
      Device, decomposed=0

      2. 중간에
      snap = TVRD(true=1, position(0)*!D.X_size, position(1)*!D.Y_Size, $
      (position(2)-position(0))*!D.X_Size, $
      (position(3)-position(1))*!D.Y_Size)
      mask=(snap eq 255)
      seaColor=255
      sea=mask*seaColor
      TV, sea ,position(0), position(1)
      와같이 TVRD를 이용해서 mask를 만들고 기타 그림을 모두 그린 뒤

      3.png 형식으로 그림을 출력할 때는 다음과같이 png 형식으로 출력파일을 만들엇으나
      img= TVRD(true=1)
      write_png, mmmm(month)+’_pdfcontour.png’, img, R,G,B
      현재는
      img= TVRD(true=1)
      까지만해서 최종 결과그림을 img에 저장하고 이를

      4. 다음과 같이 PS device에서
      outfile = mmmm(month)+’_PDF.eps’
      set_plot, ‘PS’
      device, /encapsulated ,/color , filename=outfile, /portrait, /palatino, /bold, BITS_PER_PIXEL=8
      device, xsize=21, ysize=27.7, $
      xoffset =0.5, yoffset=0.5

      TVSCL, img, /true, /CENTIMETERS, XSIZE=21, ysize=27.7

      DEVICE, /CLOSE
      로 저장만 Post script로 다시해주는 식으로 작성을 했는데
      이렇게 그림은 window에서 그리고 (TVRD 명령어를 중간에 사용하면서)
      저장을 다시한번 EPS 파일로 하는 방법말고

      한번에 postscript로 그림을 그려서 저장까지 하고 싶습니다.
      따라서
      SET_PLOT, ‘PS’와 DEVICE, /CLOSE
      사이에서 TVRD 명령어를 대체해서 저장하고 있는 그림을 배열로 받아볼 수 있는 혹은 바로 where 함수등을 이용해서 mask를 얻어내는 작업을 어떻게 하면 할 수 있는지 궁금합니다.

    • #2577 Reply
      Sangwoo
      회원

      제가 질문의 내용을 제대로 이해한 것인지는 모르겠으나, 디바이스가 PS인 상태에서 그래픽의 내용을 캡쳐하여 가져오는 작업을 하고 싶다는 의미로 생각이 되는데요. PS모드에서 그래픽의 내용을 캡쳐할 수 있는 방법은 IDL 자체적으로는 지원되지 않습니다. 원래 PS나 PDF같은 벡터 기반의 그래픽 모드 자체가 캡쳐라는 것을 지원할 수는 없는 것으로 알고 있습니다. 물론 캡쳐 기능이 있는 타 소프트웨어를 사용한다면 수동으로 가능은 하겠지요. 하지만 IDL에서 캡쳐 기능을 수행하는 내장함수인 TVRD는 화면 모드(Win) 또는 메모리 모드(Z-Buffer)에서만 사용이 가능합니다.

    • #2578 Reply
      yook
      회원

      아하! 감사합니다.
      네 답변해주신 두가지 모두 의문이었던 것이 맞으며 (PS에서의 true color사용, PS에서의 캡쳐기능)
      제가 그래픽 모드에 대한 이해가 부족해서 여러모로 어려움을 겪고있었는데
      평소 궁금하던 사항이 모두 해소되었습니다. 감사합니다~

4 답변 글타래를 보이고 있습니다
'Sea mask Postscript format'에 답변달기
글쓴이 정보: