gxLib 내려받기           gxLib 0.6.6      757kb

gx_png_create() 함수 추가

파일없이 넓이와 높이를 지정하여 PNG 이미지 객체를 생성하는 함수, gx_png_create()를 추가했습니다. 파일없이 이미지 객체를 만드는 함수로는 Bitmap 파일을 만드는 gx_bmp_create()가 있습니다만 생성되는 객체가 Bitmap이어서 투명 처리를 할 수 없는 단점이 있습니다. 그러므로 이번 0.6.6에서는 프로그램에서 gx_png_create()을 사용하면, 파일없이 필요할 때 마다 PNG 객체를 생성하여 사용할 수 있습니다.

예제에서는,

  1. 화면에 background.png를 출력하고,
  2. 파일없이 PNG객체를 생성한 후, PNG 객체의 바탕을 투명하게 한 후, “V”자를 그립니다.
    즉, gx_png_create()를 이용하여, 배경이 투명한 “V”자 PNG 이미지를 만듭니다.
  3. background.png를 출력한 화면에, 배경이 투명한 “V”자 PNG 이미지를 출력합니다.

예제를 실행하면 아래의 그림에서 처럼 background.png 위에 “V”자가 출력됩니다.

예제

#include    <stdio.h>
#include    <gx.h>
#include    <gxpng.h>

int   main( void)
{
    dc_t           *dc_screen;                          // 화면 Device Context
    png_t          *png_back;
    png_t          *png_dest;
    
    if ( gx_init( "/dev/fb"))                           // gxLib 초기화
        gx_print_error( "");                            // 실행 중 에러 내용을 출력
    else
    {
        if ( !( dc_screen = gx_get_screen_dc()))        // 화면 출력을 위한 스크린 DC 구함
            gx_print_error( "");                        // 실행 중 에러 내용을 출력
        else
        {
            gx_clear( dc_screen, gx_color( 0, 0, 0, 255));
            
            if ( !( png_back = gx_png_open( "background.png")))
                gx_print_error( "background.png");
            else
            {                                           // 배경 이미지를 출력
                gx_bitblt( dc_screen, 0, 0, (dc_t *)png_back, 0, 0, png_back->width, png_back->height);
                                                        // 파일없이 PNG 이미지를 생성    
                if ( !( png_dest = gx_png_create( 200, 100)))
                    gx_print_error( "png_create");
                {
                    png_dest->clear( png_dest, gx_color( 0, 0, 0, 0));  // 생성한 이미지를 빈 공간(?)으로
                    png_dest->pen_color = gx_color( 255, 0, 0, 255);    // 펜 색상을 빨강으로
                    gx_line(   (dc_t *)png_dest, 0, 0, 100, 100);       // 빨강색의 V 자를 그린다.
                    gx_line_to((dc_t *)png_dest, 200, 0);               // 즉, 투명한 배경 위체 빨강 V자를 그림
                    gx_bitblt( dc_screen, 0, 0, (dc_t *)png_dest, 0, 0, png_dest->width, png_dest->height);
                    gx_png_close( png_dest);
                }
                gx_png_close( png_back);
            }
            gx_release_dc( dc_screen);
        }
        gx_close();
    }
    return   0;
}