gxLib가 PNG의 알파 부분을 처리하는 기능을 추가하면서, gxLib 0.6.3으로 업그레이드했습니다. 샘플을 실행하면 0 <= alpha <= 255 처리가 되면서 이미지가 출력되는 것을 보실 수 있습니다.

gxLib 내려받기           gxLib 0.6.3      3,794kb
아울러 수정된 내용은 아래와 같습니다.
  1. int gx_print_error ( char *remark)
    인수에 에러 내용과 함께 출력할 수 있는 문자열을 받는 char *remark를 추가했습니다.

  2. png 출력에 0 < alpha < 255 처리를 추가했습니다.
    png 출력을 조금이라도 빠르게 하기 위해 gx_bitblt() 부분을 0 = alpha, 255 = alpha,
    0 < alpha < 255 부분으로 나누어 루틴을 구성했습니다.

  3. 이전 버전에서는 gx_bitblt() 에서, 같은 타입의 DC에 대해 같은 갈라 깊이라면 빠른 복사를 위해 b1_, b4_, b8, b_16, b_24, b_32별로 메모리 복사해 주는 함수를 따로 두었지만, b8부터 b32까지는 모두 byte_bitblt()로 모두 처리할 수 있도록 했습니다.

  4. 이외 자잔한 코드를 수정했습니다.

아울러 푸른수염님께서 숨어 있는 버그를 올바르게 잡아 주셨습니다. 역시 같이 작업하니 너무 좋군요. 앞으로 많은 분들이 같이 참여해 주시기를 바라고 또 바랍니다. 푸른수염님께서 잡아 주시 내용은 아래와 같습니다.

  1. void gx_bitblt()에서 switch() 구문
    칼라 깊이 지정이 32를 36으로 작성된 오류

  2. bitmap_t *gx_bmp_open( char *filename)
    아주 심각한 버그가 있었네요. Bitmap 파일을 모두 읽은 후 파일을 종료해야 하는데 누락되었네요.
    하단에 fclose(fp); 추가를 지적해 주셨습니다.

  3. png_t *gx_png_open( char *filename) 에서 pBackground 안전 확복
    pBackground = NULL; 코드 추가 및 png_get_bKGD(png_ptr, info_ptr, &pBackground); 호출 후에 NULL 여부를 확인을 하는 if 절을 추가해 주셨습니다.

    if( pBackground != NULL )
    {
        :
    }

  4. gx.c 에서 byte_bitblt() 캐스트 연산자 추가
    char *pdest = (char*)dc_dest->mapped +dc_dest->bytes_per_line*dest_y +dest_x*bytes_per_pixel;
    char *psour = (char*)dc_sour->mapped +dc_sour->bytes_per_line*sour_y +sour_x*bytes_per_pixel;

이렇게 gxLib를 함께 고심해 주시고 수고를 마다하지 않아 주신 푸른수염님께 감사드립니다. 그리고 기쁘게도 곧 푸른수염님께서 JPEG를 처리할 수 있는 루틴을 추가해 주신다고 하셨습니다. 곧 즐거운 소식을 전해 드릴 것으로 생각됩니다. 많이 기대해 주세요. ^^