오늘은 Direct graphics에 관련된 이야기를 해보고자 합니다. window창을 띄우고 그 그림이나 그래프를 저장하는데 있어서 상당히 다양한 방법을 이용하실텐데요. 오늘은 그 중에서도 IDL에 존재하는 함수를 이용한 방법을 소개하고자 합니다. 제목에서 나와있는 것 처럼 tvrd함수를 이용하는 것입니다. 이 글을 작성하는 저 같은 경우에도 Direct graphics를 이용해서 작업할 땐 주로 캡쳐하는 방법을 많이 이용했는데, 이러한 매우 근본적인 방법이 있다는 것도 아셨으면 합니다. 제목에는 없지만, 그림을 저장하는 함수도 등장합니다.
우선은 시작하기에 앞서 곡면을 하나 그려보도록 하겠습니다. hanning함수를 이용해서 쉽게 하나를 그릴 수 있습니다.
1 2 |
IDL> a=hanning(200,200) IDL> shade_surf,a |
이제 윈도우에 띄운 이 곡선을 tvrd함수를 이용하여 2차원의 배열로 변환시킬 수 있습니다. help로 확인을 하면,
1 2 3 |
IDL> img=tvrd() IDL> help,img IMG BYTE = Array[960, 600] |
960×600크기의 배열이 생겼습니다. 이것은 제 IDL window의 크기로 보면 되겠네요. 혹은 다음과 같이 조건을 줄 수도 있습니다.
1 2 3 |
IDL> img2=tvrd(true=1) IDL> help,img2 IMG2 BYTE = Array[3, 960, 600] |
true=1 이라는 값을 추가하면 배열의 첫번째에 3칸짜리 배열이 생기는데, 이것은 R,G,B값을 표현하고 있는 truecolor 이미지입니다. true의 값이 달라지면 3칸짜리 배열의 위치도 바뀌게 됩니다. 만약 true가 2면
1 2 3 |
IDL> img3=tvrd(true=2) IDL> help,img3 IMG3 BYTE = Array[960, 3, 600] |
(비슷한 코드를 자꾸 반복한다고 생각하시면 지는겁니다)
이런 계열의 경우 RGB를 사용하는 다른 종류의 함수들에서도 이러한 키워드를 이용하여 RGB를 판단하니 중요하게 체크합시다. (예를 들면 tv 도 같은 키워드가 존재합니다.)
사설이 길었는데, 방금까지 만든 배열이 바로 그림을 그리기위해 필요한 픽셀위치에 따른 색의 값을 가지고 있는 배열입니다. 매우 순식간에 만들어졌지요. 과연 우리가 제대로 작업했나를 보기위해 tv를 이용해봅시다. 우선 예제에서는 맨 처음 작성한 8Bit의 배열을 이용하도록 하겠습니다.
1 |
IDL> tv,img |
잘 따라오셨으면, 방금전에 봤던 곡면과 같은 모양의 그림이 출력되는 것을 아실 수 있습니다. 이제는 이것을 저장하는 것만 남았는데요. 이미지를 저장하는 프로시저로 write_image도 존재하지만, 이미지의 종류마다 다양한 프로시저가 존재합니다. 여기서는 위에서 이용한 8bit형식의 배열을 이용해서 8bit 저장이 가능한 세종류의 형식으로 저장하고자 합니다.(어짜피 이미지가 흑백이었으니까요.) 간단하게 다음과 같이 이용이 가능합니다.
1 2 3 |
IDL> write_png,'test.png',img IDL> write_bmp,'test.bmp',img IDL> write_gif,'test.gif',img |
결과적으로 workspace에 각각의 이름을 가진 파일이 생성되었을 것입니다. 만약 jpeg같은형식의 자료를 저장하려면,
1 |
IDL> write_jpeg,'test.jpg',img2,true=1 |
로 이용하시면 됩니다. 여기서도 true키워드가 이용되는 것을 확인하실 수 있습니다.
오늘 이용한 함수 tvrd함수 같은 경우에는 일찍 알았으면 참 유용하게 썼으리라 생각됩니다. 저는 매일 ctrl+c해서 그림판에 붙여넣었던 기억밖에 없는데 말이죠. 어쨋든 Direct graphics를 사용하시는 분들이라면 유용하게 이용할 수 있기를 바라면서 마치도록 하겠습니다.
저는 반대로, 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