TVRD함수 활용하여 그림 저장하기

오늘은 Direct graphics에 관련된 이야기를 해보고자 합니다. window창을 띄우고 그 그림이나 그래프를 저장하는데 있어서 상당히 다양한 방법을 이용하실텐데요. 오늘은 그 중에서도 IDL에 존재하는 함수를 이용한 방법을 소개하고자 합니다. 제목에서 나와있는 것 처럼 tvrd함수를 이용하는 것입니다. 이 글을 작성하는 저 같은 경우에도 Direct graphics를 이용해서 작업할 땐 주로 캡쳐하는 방법을 많이 이용했는데, 이러한 매우 근본적인 방법이 있다는 것도 아셨으면 합니다. 제목에는 없지만, 그림을 저장하는 함수도 등장합니다.

우선은 시작하기에 앞서 곡면을 하나 그려보도록 하겠습니다. hanning함수를 이용해서 쉽게 하나를 그릴 수 있습니다.

이제 윈도우에 띄운 이 곡선을 tvrd함수를 이용하여 2차원의 배열로 변환시킬 수 있습니다. help로 확인을 하면,

960×600크기의 배열이 생겼습니다. 이것은 제 IDL window의 크기로 보면 되겠네요. 혹은 다음과 같이 조건을 줄 수도 있습니다.

true=1 이라는 값을 추가하면 배열의 첫번째에 3칸짜리 배열이 생기는데, 이것은 R,G,B값을 표현하고 있는 truecolor 이미지입니다. true의 값이 달라지면 3칸짜리 배열의 위치도 바뀌게 됩니다. 만약 true가 2면

(비슷한 코드를 자꾸 반복한다고 생각하시면 지는겁니다)

이런 계열의 경우 RGB를 사용하는 다른 종류의 함수들에서도 이러한 키워드를 이용하여 RGB를 판단하니 중요하게 체크합시다. (예를 들면 tv 도 같은 키워드가 존재합니다.)

사설이 길었는데, 방금까지 만든 배열이 바로 그림을 그리기위해 필요한 픽셀위치에 따른 색의 값을 가지고 있는 배열입니다. 매우 순식간에 만들어졌지요. 과연 우리가 제대로 작업했나를 보기위해 tv를 이용해봅시다. 우선 예제에서는 맨 처음 작성한 8Bit의 배열을 이용하도록 하겠습니다.

잘 따라오셨으면, 방금전에 봤던 곡면과 같은 모양의 그림이 출력되는 것을 아실 수 있습니다. 이제는 이것을 저장하는 것만 남았는데요. 이미지를 저장하는 프로시저로 write_image도 존재하지만, 이미지의 종류마다 다양한 프로시저가 존재합니다. 여기서는 위에서 이용한 8bit형식의 배열을 이용해서 8bit 저장이 가능한 세종류의 형식으로 저장하고자 합니다.(어짜피 이미지가 흑백이었으니까요.) 간단하게 다음과 같이 이용이 가능합니다.

결과적으로 workspace에 각각의 이름을 가진 파일이 생성되었을 것입니다. 만약 jpeg같은형식의 자료를 저장하려면,

로 이용하시면 됩니다. 여기서도 true키워드가 이용되는 것을 확인하실 수 있습니다.

오늘 이용한 함수 tvrd함수 같은 경우에는 일찍 알았으면 참 유용하게 썼으리라 생각됩니다. 저는 매일 ctrl+c해서 그림판에 붙여넣었던 기억밖에 없는데 말이죠. 어쨋든 Direct graphics를 사용하시는 분들이라면 유용하게 이용할 수 있기를 바라면서 마치도록 하겠습니다.

One Comment

  1. 저는 반대로, TVRD()를 먼저 배웠고, Ctrl+C로 화면을 캡춰하여 클립보드에 저장할 수 있다는 사실을 나중에 알게 되어 기뻤던 기억이 납니다.
    “왜, 나는 이 단순하고 당연한 시도를 해 보지 않았을까?”
    하는 놀라움도 있었습니다. 누구나 익숙해지면 오히려 틀에 박혀들어가는, 그런 면도 있는 것 같습니다.

    프리젠테이션 자료를 만들 때, Ctrl+C 와 Ctrl+V 로 화면을 붙일 수 있는 기능은 매우 유용합니다.
    Direct Graphics 뿐 아니라, Object Graphics, New Graphics 등, IDL의 모든 그림창은 Ctrl+C / Ctrl+V로 여러분이 예상하시는 작업을 수행할 수 있습니다.

    혹시 Mac OS X 에서 TVRD()가 예상대로 안움직이는 상황이라면, 다음 링크를 참고하십시오.

    http://www.spweather.com/idluser/bbs/view.php?id=idltip&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=148

Comments are closed.