푸른수염님께서 gxLib에 JPEG를 사용할 수 있는 jpeg.c와 jpeg.h를 만들어 주셔습니다. 푸른수염님께 큰 감사를 드립니다.  감사 감사. ^^ 귀한 시간을 내서 만들어 주신 만큼 감사히 잘 사용해야 겠습니다. 바로 사용하기 위해서 JPEG 라이브러리부터 설치하겠습니다.

gxLib 내려받기           gxLib 0.6.4      38kb

JPEG 라이브러리 설치http://forum.falinux.com/zbxe/

타겟보드가 아닌 개발 호스트용 PC에 JPEG 라이브러리를 설치하는 방법에 대해 알아 보겠습니다. 우선 JPEG 라이브러리를 제공하는 사이트부터 소개할 께요.

Independent JPEG Groupftp://ftp.uu.net/graphics/jpeg 페이지를 보시면 jpegsrc.v6b.tar.gz 파일이 있습니다. 이 파일로 설치하시면 됩니다.

개발 호스트에 JPEG 라이브러리 설치

먼저 타겟보드가 아닌 개발 호스트용 PC에 설치해 보겠습니다. ftp 사이트에서 내려 받은 후에 임시 디렉토리로 복사하고 설치 작업을 하셔도 좋습니다만, wget을 이용하면 편하게 작업하실 수 있습니다. 라이브러리를 설치하는 만큼 root 권한으로 진행하겠습니다. 개발 호스트용 JPEG 라이브러리는 가급적 설치 위치를 바꾸지 마시고 기본 설치 장소로 설치하십시오. 그렇지 않으면 에러가 발생합니다. ^^

]# mkdir temp       // 작업하기 적당한 디렉토리를 생성하고 이동
]# cd temp
]# wget ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz
--16:49:05--  ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz
           => `jpegsrc.v6b.tar.gz'
Resolving ftp.uu.net... 192.48.96.9
Connecting to ftp.uu.net|192.48.96.9|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD /graphics/jpeg ... done.
==> SIZE jpegsrc.v6b.tar.gz ... 613261
==> PASV ... done.    ==> RETR jpegsrc.v6b.tar.gz ... done.
Length: 613261 (599K)

100%[====================================================>] 613,261      254K/s   in 2.4s   

16:49:11 (254 KB/s) - `jpegsrc.v6b.tar.gz' saved [613261]
]# tar zxvf jpegsrc.v6b.tar.gz
]# cd jpeg-6b
]# mkdir /usr/local/man/man1     // 미리 메뉴얼을 위한 디렉토리를 생성합니다. 안하면 에러 발생
]# ./configure --enable-shared   // Makefile의 내용을 갱신합니다.
]# make && make install          // JPEG 라이브러리를 설치

타켓보드를 위한 JPEG 라이브러리 설치

설치 예는 au-1200을 대상으로 하겠습니다. 제가 제일 애용하는 보드라서요. ^^ 당연히 크로스 컴파일러는 mipsel-linux-gcc가 되겠습니다. 또한 PNG 라이브러리와 같이 /usr/mipxel-linux 에 설치하겠습니다.

]# mkdir temp       // 작업하기 적당한 디렉토리를 생성하고 이동
]# cd temp
]# wget ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz
--16:49:05--  ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz
           => `jpegsrc.v6b.tar.gz'
Resolving ftp.uu.net... 192.48.96.9
Connecting to ftp.uu.net|192.48.96.9|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD /graphics/jpeg ... done.
==> SIZE jpegsrc.v6b.tar.gz ... 613261
==> PASV ... done.    ==> RETR jpegsrc.v6b.tar.gz ... done.
Length: 613261 (599K)

100%[====================================================>] 613,261      254K/s   in 2.4s   

16:49:11 (254 KB/s) - `jpegsrc.v6b.tar.gz' saved [613261]
]# tar zxvf jpegsrc.v6b.tar.gz
]# cd jpeg-6b
]# mkdir /usr/mipsel-linux/man/man1  // 미리 메뉴얼을 위한 디렉토리를 생성합니다. 안하면 에러 발생
]# ./configure --enable-shared   // Makefile의 내용을 갱신합니다.

////////////////////////////////////////////// 타겟보드에 맞추어 Makefile을 수정합니다.

]# vi Makefile

아래의 내용을 수정합니다.

   prefix = /usr/mipsel-linux
   CC= mipsel-linux-gcc
   AR= mipsel-linux-ar rc
   AR2= mipsel-ranlib

]# make && make install          // JPEG 라이브러리를 설치

////////////////////////////////////////////// 타겟보드에 복사
]# cd /usr/mipxel/lib
]# tar zcvf /마운트 공유디렉토리/lib-jpeg.tar.gz libjpeg.so*
libjpeg.so
libjpeg.so.62
libjpeg.so.62.0.0
]#

이제 타겟보드로 라이브러리를 복사하면 끝입니다. 이후 설명은 타겟보드에서 진행하겠습니다.

]$ mout -t nfs -o nolock [타겟보드 IP]:/NFS 공유 디렉토리 /mnt/nfs
]$ tar zxvf /mnt/nfs/lib-jpeg.tar.gz

gxLib에서 변경된 내용

  1. 다른 이미지 포맷과 맞추기 위해 bitmap_t를 bmp_t로 변경했습니다.
  2. 모듈 파일 별로 전체 설명을 위해, 코드 상단에 주석을 추가했습니다.

bitmap_t를 bmp_t로 변경하게 되서 죄송합니다만, 이제 다른 이미지 포맷도 지원하게 되었고, 또 앞으로 지원하게 될 새로운 이미지 포맷을 위해서도, 미리 이름을 3자로 맞추는 것이 좋을 듯해서 변경하게 되었습니다. 이로써 이미지 별로 구조 이름과 함수 이름 앞에 붙는 이름까지 모두 3자로 맞추게 되었습니다.

gxLib 설치 및 샘플 프로그램 실행

이전 시간에 말씀드렸던 PNG와 이번에 소개한 JPEG 라이브러리를 설치했다면, 별다른 설치없이 gxLib를 풀기만하고 Makefile에 포함하여 사용하시면 됩니다.

Makefile

새로운 Makefile은 지금까지의 Makefiel에서 JPEG 라이브러리를 지정하는 것과 gxjpeg.c 를 추가하시면 됩니다.

CROSS_PREFIX   = mipsel-linux
TARGET         = sample
OBJS           = sample.o gx.o gxbmp.o gxpng.o gxjpg.o gxbdf.o fontinfo.o ksc5601.o
SRCS           = $(OBJS:.o=.c)
INCLUDEDIRS    += -I.
LIVDIRS        +=
CFLAGS         = $(INCLUDEDIRS) -W -Wall -O2
LDFLAGS        = $(LIVDIRS)
LIBS           = -lm -lpng12 -ljpeg -lz

#---------------------------------------------------------------------
CC           = $(CROSS_PREFIX)-gcc
CXX          = $(CROSS_PREFIX)-g++
AR           = $(CROSS_PREFIX)-ar rc
AR2          = $(CROSS_PREFIX)-ranlib
RANLIB       = $(CROSS_PREFIX)-ranlib
LD           = $(CROSS_PREFIX)-ld
NM           = $(CROSS_PREFIX)-nm
STRIP        = $(CROSS_PREFIX)-strip
OBJCOPY      = $(CROSS_PREFIX)-objcopy
CP = cp
MV = mv
#--------------------------------------------------------------------

$(TARGET): $(OBJS)
   $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)

.c.o:
   $(CC) -c $(CFLAGS) $<

dep :
   $(CC) -M $(INCLUDEDIRS) $(SRCS) > .depend

clean:
   rm -f *.bak
   rm -f *.map
   rm -f *.o
   rm $(TARGET)
   @echo "파일을 삭제했습니다."

distclean: clean
   rm -rf .depend

ifeq (.depend,$(wildcard .depend))
include .depend
endif

PNG나 JPEG처럼 라이브러리 식으로 제공하지 않고 소스로 제공하는 이유는, 아직 수정할 것이 많고 추가할 것이 많으며, 또한 gxLib의 베터 테스트 기간이 적어서 버그가 예상되어, gxLib를 사용하시는 분께서 문제점을 쉽게 찾아 보실 수 있도록 소스로 제공합니다.

혹, 문제점을 찾으셨다면 gxLib의 발전을 위해 말씀을 주시면 감사하겠습니다. 아울러 포럼인 만큼 해결책을 찾아서 제공해 주신다면 많은 분에게 큰 도움이 될 것입니다. 혼자만 알지 마시고 지식을 공유해 주시면 감사하겠습니다.

샘플 프로그램 실행

Makefile에서 프로그램 파일 관계를 갱신한 후에 컴파일을 실행합니다.

]$ make dep
]$ make
]$ ./sample

sample을 실행하시면 같은 디렉토리에 있는 test.jpg를 화면에 출력합니다. JPEG 파일을 출력하기 위한 jpg_t도 역시 다른 bmp_t와 png_t처럼 gxLib 함수를 이용하실 수 있습니다.

이렇게 하나씩 gxLib가 그래픽 라이브러리로서 면모를 갖추어 나가고 있어서 매우 기쁩니다. 앞으로 계속 발전시켜 나가겠습니다. 많은 관심과 도움을 부탁드립니다. ^^