- This topic has 5개 답변, 3명 참여, and was last updated 7 years, 11 months 전에 by Sangwoo.
-
글쓴이글
-
-
안녕하세요
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 저장이 이상하게 됩니다. -
mwkim회원
말씀하신 것처럼 NaN값이 있을 때는 흑백으로 이상하게 저장되는 것 같습니다.
아마 IDL> i.Save, ‘[파일이름].pdf’ 으로 저장하셨을 텐데
/BITMAP 키워드를 사용하면 해결되는 것 같습니다.
/BITMAP 키워드에 대한 설명은 IDL 도움말을 보시면 될 것 같고요…;;
eps 파일은 확인해보지 않았지만 pdf 파일은 이 방법으로 해결되는 것 같습니다.
-
답변 감사합니다.
말씀해주신 bitmap 키워드를 사용하면 그림이 제대로 저장됩니다.
하지만 제가 필요한 것은 vector라 bitmap 키워드는 적절하지 않은 것같습니다.
IDL 8 버전 초반 부터 pdf 저장은 자잘한 버그가 몇 있었는데 아직 많이 수정이 안된 것 같습니다.
-
mwkim회원
IMAGE 함수를 통해 표출된 내용에 대해서는 벡터로 저장하는 과정에서
NaN 값에 대한 처리가 잘 안되는 것 같습니다.
벡터 방식으로 저장하실려면 NaN 값을 제거해야 될 것 같습니다.
(예를 들면 CopyWindow 메소드로 이미지를 저장하고 재 출력하거나,
NaN 값 대신에 임의값을 지정하고 그 부분만 배경색과 동일하게 출력하는 방식 등)아무래도 벡터 형식의 저장 기능이 주로 사용되는 비트맵 파일 포맷에 비해서
예외적으로 작동하는 부분이 있는 것 같습니다.
-
-
Sangwoo회원
이 문제는 아마 버그라고 보는 것이 맞을 것 같습니다. 일단 꼼수이긴 하지만 피해가는 방법이 있긴 한데요. 동일한 데이터에 대하여 다음과 같이 SURFACE 함수를 사용해서 surface 그래픽을 의도적으로 삽입한 후 보이지 않게 처리하는 방법입니다. 그러면 NaN 값이 있다 하더라도 벡터 포맷으로 저장하는데 문제가 없는 것으로 확인을 했습니다.
sf = SURFACE(data, AXIS_STYLE=0, /CURRENT)
sf.Hide = 1물론 왜 이 방법이 먹히는지는 저도 모릅니다. 하여간 버그인가에 대한 여부는 본사 기술팀에 문의를 해봐야 알 것 같지만, 금방 수정된다는 보장은 없으므로 당장은 위의 방법을 시도해보시길 권합니다.
-
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’
-
-
글쓴이글