[완료]raw rgb 16 bit 를 jpeg 로 변환하기

poplinux의 이미지

프레임 버퍼에 있는 16bit rgb 를 jpeg 로 변환하려고 합니다. libjpeg 를 써야 할 것으로 생각되는데 이쪽은 해 본 적이 없어서 어디서 부터 해야 할지 잘 모르겠습니다. 혹시 비슷한 일을 해 주는 c 소스나 사이트 부탁 드립니다.

정태영의 이미지

libgd 소스를 보시거나 libgd 를 쓰세요.

--
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

ganadist의 이미지

24bit rgb로 변환한 다음, 라이브러리에서 제공하는 함수를 쓰면 될 것 같은데요.

제대로 굴러갈런지는 모르겠습니다만 대충 이런 느낌(?)으로 만드시면 될듯 합니다 =33

FILE *fp = fopen("xxx.jpg", "w");
struct jpeg_compress_struct cinfo;
struct error_handler_data jerr;
cinfo.err = jpeg_std_error(&jerr.pub);
 
jpeg_create_compress(&cinfo);
jpeg_stdio_dest(&cinfo, fp);
cinfo.image_width = width;
cinfo.image_height = height;
cinfo.input_components = 3;
cinfo.in_color_space = JCS_RGB;
jpeg_set_defaults(&cinfo);
int quality = 80;
jpeg_set_quality(&cinfo, quality, TRUE);
jpeg_start_compress(&cinfo, TRUE);
JSAMPROW lines[16];
uint8_t * pixdata[width * 16 * 3];
int y = 0;
uint8_t * src = (uint8_t *)srcbuf /* 24bit rgb buffer */
while (y < height) {
  int i;
  for (i=0;i<16 && y < height; i++, y++) {
    uint8_t *p = pixdata + i *width *3;
    lines[i] = p;
    int x;
    for (x=0; x<width; x++) {
       *p++ = *src++;
       *p++ = *src++;
       *p++ = *src++;
       src++;
    }
    jpeg_write_scanlines(&cinfo, lines, i);
}
jpeg_finish_compress(&cinfo);
jpeg_destroy_compress(&cinfo);
fclose(fp);

----
Do not feed troll!

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러

superkkt의 이미지

libjpeg에 포함된 cjpeg 소스 파일을 보세요.

======================
BLOG : http://superkkt.com

======================
BLOG : http://superkkt.com

poplinux의 이미지

도움 주셔서 감사합니다.

알려 주신 내용을 바탕으로 시작해 보겠습니다.

========================
조직 : E.L.D(Embedded Linux Developer/Designer)
블로그 : poplinux@tistory.com
카페 : cafe.naver.com/poplinux

임베디드 리눅스 관련 프리렌서 지향