그래픽 & 멀티미디어
gxLib에서 폰트 처리가 매끄럽지 못해 버전업했습니다. 폰트를 하나 사용했을 때에는 문제없는데, 여러 개의 폰트를 사용하면 새로 지정한 폰트가 적용이 안 되는 문제가 있습니다.
아래의 화면은 서로 다른 모양의 폰트를 이용하여 문자열을 출력했지만, 모두 같은 폰트로 출력되었습니다. 이는 폰트를 지정하고 문자열을 출력하면, 출력되는 각 문자에 대해 화면에 출력할 이미지를 만들게 되는데, 만들어진 이미지는 다음에 사용할 수 있도록 캐시 변수에 저장됩니다. 그리고 다음 문자열을 출력할 때, 이미 만들어 놓은 이미지가 있다면, 폰트가 변경되었더라도 이전에 만들어진 이미지를 사용하게 되어 변경된 폰트 설정이 적용되지 않게 됩니다.
출력하지 않은 문자열을 출력해 보겠습니다. 보시면 이전 폰트로 만들어지지 않은 새로운 문자열 "포럼" 글자만 새로 지정한 포트로 출력되었습니다.
이렇게 이미 출력된 문자에 대한 이미지는 gxbdf.c 내용 중에 bdfFontCache gx_fontcache; 변수에 저장됩니다. 새로 업그레이드된 gxLib는 폰트를 지정하면 캐시를 초기화하여 새로 지정된 폰트로 문자열이 출력될 수 있도록 했습니다.
아울러 폰트 지정을 Device Context에서 폰트 핸들을 지정하는 방법에서 gxSetFont() 함수를 추가하여 폰트 이름만 넘겨 주면 폰트가 변경되고 지정이 되도록 수정했습니다.
gxSetFont( "gulim.bdf"); gxTextOut( dc, 0 , 20, "안녕하세요. 여기는 Falinux Forum 입니다." );
폰트를 여러 개 사용하신다면 꼭, 최신 버전으로 업그레이드하세요. ^^
글씨가 깨지는 것은 아마도 글자를 이미지를 만들어서 저장하는 캐시 변수의 크기가 작아서 발생하는 것으로 생각됩니다.
cache 변수에서 이미지를 갖는 변수의 크기를 큰 수로 변경해 보세요.
사정이 있어서 확인할 수가 없네요. 아마 어렵지 않게 문제점을 잡으시리라 생각됩니다.
만일 문제를 잡으시면 글을 부탁드립니다. ^^
안녕하십니까? 안쪼입니다.
30PT이상의 font도 문제없이 dipslay가 되는데 성공했네요!!! ㅋㅋㅋㅋ
확인해 보니, bdf 이미지를 가지고 오는 부분에서 nByte 수가 4를 넘어가면 에러가 발생합니다.
ex) "W"글자의 경우가 그렇네요!! (nbyte=5)
해당 포인트만 수정된 소스를 올립니다.
그리고 혹시 "CURSOR" Diplsay 기능은 구현 가능한건지요??? 커서 기능이 필요할것 같아서요!!
현재는 freetype fone 엔진으로 함 올려볼가합니다. 컴파일은 무리없이 되었는데,,,,
올려 주신 소스를 보니 이 문제를 해결하시려고 많이 고생하셨네요.
포럼의 특성을 살리기 위해, 또 다른 분께 도움을 드리기 위해 몇가지 여쭙니다. ^^
주석을 모두 없애니 수정하신 부분이 int ReadFont() 부분인가요?
con[]={4,1,2,3,} 을 사용하시면서, nbyte 값에 따라
루프를 달리하신 이유가 궁금합니다.
혹시 최종으로 정리된 코드를 부탁드릴 수 있을까요?
저는 지금 PNG 이미지를 출력하는 방법을 찾아 보고 있습니다.
곧 좋은 소식을 올릴 수 있을 것 같습니다.
앞으로도 계속 도움을 부탁드립니다. ^^
GxLib를 이용해서 개발하고 있는 엔지니어입니다. 많은 자료를 올려주셔서 정말감사합니다.
현재 Project개발 중 GULIM.bdf의 폰트 싸이즈를 변경해 보았는데,, 기본적으로 12PT,20PT까지는 정상적으로
LCD에 display되는데... 30PT의 경우는 특정 문자에가 깨지는 현상이 발생합니다.(폰트는 현재 굴림,바탕까지 구현됨)
혹 bdf 싸이즈를 조정해서 올려 보셨는지 궁금합니다.
그럼!! 수고하십시요!!