태그: mask, ocean, postscript, ps, sea
- This topic has 4개 답변, 2명 참여, and was last updated 8 years, 7 months 전에 by yook.
-
글쓴이글
-
-
yook회원
그림을 그리다보니 해양 부분을 mask해야하는 경우가 생겼습니다.
land의 경우 map_continent 함수의 /fill 으로 mask를 할 수가 있지만
sea는 내장함수를 어떻게 이용해야할지 모르겠어서,
TVRD를 이용해서 직접 mask를 만들어서 이용했습니다.그래서 결과물을 png 형식으로 출력했습니다만,
파일을 png가아닌 postscript형식으로 출력해보고싶은데,이때 SET_PLOT, ‘PS’ 에서는 TVRD와 같이 윈도우에 출력되는 그림을 2차원혹은 3차원 배열(Truecolor)로 받을 수 있는 방법을 모르겠어서, 어떻게하면 mask를 만들 수 있는지 문의드립니다.
-
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 전에 수정됐습니다.
-
yook회원
네 답변 감사합니다.
bit_per_pixel=8 명령어를 이용해서 post script형식에서도 true color를 사용할 수 있는 것은 이제 이해가 되었습니다.
그러나 제가 현재는,
1. 먼저 다음과같이 window로 그림을 그리고
window, xsize=xa4, ysize=ya4,/pixmap
Device, decomposed=02. 중간에
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.5TVSCL, img, /true, /CENTIMETERS, XSIZE=21, ysize=27.7
DEVICE, /CLOSE
로 저장만 Post script로 다시해주는 식으로 작성을 했는데
이렇게 그림은 window에서 그리고 (TVRD 명령어를 중간에 사용하면서)
저장을 다시한번 EPS 파일로 하는 방법말고한번에 postscript로 그림을 그려서 저장까지 하고 싶습니다.
따라서
SET_PLOT, ‘PS’와 DEVICE, /CLOSE
사이에서 TVRD 명령어를 대체해서 저장하고 있는 그림을 배열로 받아볼 수 있는 혹은 바로 where 함수등을 이용해서 mask를 얻어내는 작업을 어떻게 하면 할 수 있는지 궁금합니다. -
Sangwoo회원
제가 질문의 내용을 제대로 이해한 것인지는 모르겠으나, 디바이스가 PS인 상태에서 그래픽의 내용을 캡쳐하여 가져오는 작업을 하고 싶다는 의미로 생각이 되는데요. PS모드에서 그래픽의 내용을 캡쳐할 수 있는 방법은 IDL 자체적으로는 지원되지 않습니다. 원래 PS나 PDF같은 벡터 기반의 그래픽 모드 자체가 캡쳐라는 것을 지원할 수는 없는 것으로 알고 있습니다. 물론 캡쳐 기능이 있는 타 소프트웨어를 사용한다면 수동으로 가능은 하겠지요. 하지만 IDL에서 캡쳐 기능을 수행하는 내장함수인 TVRD는 화면 모드(Win) 또는 메모리 모드(Z-Buffer)에서만 사용이 가능합니다.
-
yook회원
아하! 감사합니다.
네 답변해주신 두가지 모두 의문이었던 것이 맞으며 (PS에서의 true color사용, PS에서의 캡쳐기능)
제가 그래픽 모드에 대한 이해가 부족해서 여러모로 어려움을 겪고있었는데
평소 궁금하던 사항이 모두 해소되었습니다. 감사합니다~
-
-
글쓴이글