예제 #1
0
/*
 * Draw aa rectangle region (32 bits per pixel)with spcial color
 *
 *
 *
 */
void fill_rect_with_color_by_32bit(unsigned int *fill_addr, RECT_REGION_T rect, unsigned int src_color, LCM_SCREEN_T phical_screen)
{

    //int virtual_width = phical_screen.width;
    int virtual_width = phical_screen.needAllign == 0? phical_screen.width:phical_screen.allignWidth;
    int virtual_height = phical_screen.height;

    int i = 0;
    int j = 0;

    unsigned int * dst_addr = fill_addr;

    for(i = rect.top; i < rect.bottom; i++)
    {   
        for(j = rect.left; j < rect.right; j++)
        {
            switch (phical_screen.rotation)
            {
                case 90:
                    dst_addr = fill_addr + ((virtual_width * i + virtual_width - j));
                    break;                    
                case 270:
                    dst_addr = fill_addr + ((virtual_width * (virtual_height - i - 1)+ j));
                    break;
                case 180:
                    dst_addr = fill_addr + virtual_width * (virtual_height - i)- j-1;
                    break;
                default:
                    dst_addr = fill_addr + virtual_width * i + j;
            }

            fill_point_buffer(dst_addr, src_color, phical_screen, 32);
        }
    }
}
예제 #2
0
/*
 * Draw a rectangle region (32 bits perpixel) with logo content 
 *
 * 
 *
 */
void fill_rect_with_content_by_32bit(unsigned int *fill_addr, RECT_REGION_T rect, unsigned short *src_addr, LCM_SCREEN_T phical_screen)
{
    int draw_height = rect.bottom - rect.top;
    
    int virtual_width = phical_screen.needAllign == 0? phical_screen.width:phical_screen.allignWidth;
    int virtual_height = phical_screen.height;     
    
    int i = 0;
    int j = 0; 
    
    unsigned int * dst_addr = fill_addr;
    unsigned int * color_addr = (unsigned int *)src_addr;   
    
    for(i = rect.top; i < rect.bottom; i++)
    {   
        for(j = rect.left; j < rect.right; j++) 
        {
            switch (phical_screen.rotation)
            {
                case 90:
                    color_addr = (unsigned int *) (src_addr + draw_height*j + i);
                    dst_addr = fill_addr + ((virtual_width * i + virtual_width - j));
                    break;                    
                case 270:
                    color_addr = (unsigned int *) (src_addr + draw_height*j + i);
                    dst_addr = fill_addr + ((virtual_width * (virtual_height - i - 1)+ j));
                    break;
                case 180:
                    // adjust fill in address
                    color_addr = (unsigned int *)src_addr++;
                    dst_addr = fill_addr + virtual_width * (virtual_height - i)- j-1;
                    break;                    
                default:
                    color_addr = (unsigned int *)src_addr++;
                    dst_addr = fill_addr + virtual_width * i + j;

            }
              
            //if(((i>rect.bottom-2) || ( i%400==0)) && ((j>rect.right-2) || (j%400 == 0)))
            //{
            //   LOG_ANIM("[show_logo_common]dst_addr = %d,color_addr= %d,i= %d,j=%d \n",(int)dst_addr, (int)color_addr, i , j);      
            //}            
            //fill_point_buffer(dst_addr, 0xf800, phical_screen.bits_per_pixel);      // fill in red color for test
            fill_point_buffer(dst_addr, *color_addr, phical_screen.bits_per_pixel);           
        }
    }
}
예제 #3
0
/*
 * Draw a rectangle region (32 bits perpixel) with logo content 
 *
 *
 *
 */
void fill_rect_with_content_by_32bit_rgb565(unsigned int *fill_addr, RECT_REGION_T rect, unsigned short *src_addr, LCM_SCREEN_T phical_screen, unsigned int bits)
{
    int draw_height = rect.bottom - rect.top;

    int virtual_width = phical_screen.needAllign == 0? phical_screen.width:phical_screen.allignWidth;
    int virtual_height = phical_screen.height;

    int i = 0;
    int j = 0; 

    unsigned int * dst_addr = fill_addr;
    unsigned int * color_addr = (unsigned int *)src_addr;

    for(i = rect.top; i < rect.bottom; i++)
    {
        for(j = rect.left; j < rect.right; j++)
        {
            switch (phical_screen.rotation)
            {
                case 90:
                    color_addr = (unsigned int *) (src_addr + draw_height*j + i);
                    dst_addr = fill_addr + ((virtual_width * i + virtual_width - j));
                    break;
                case 270:
                    color_addr = (unsigned int *) (src_addr + draw_height*j + i);
                    dst_addr = fill_addr + ((virtual_width * (virtual_height - i - 1)+ j));
                    break;
                case 180:
                    // adjust fill in address
                    color_addr = (unsigned int *)src_addr++;
                    dst_addr = fill_addr + virtual_width * (virtual_height - i)- j-1-(virtual_width-phical_screen.width);
                    break;
                default:
                    color_addr = (unsigned int *)src_addr++;
                    dst_addr = fill_addr + virtual_width * i + j;
            }
            fill_point_buffer(dst_addr, *color_addr, phical_screen, bits);
            if((i == rect.top && j == rect.left) || (i == rect.bottom - 1 && j == rect.left) ||
               (i == rect.top && j == rect.right - 1) || (i == rect.bottom - 1 && j == rect.right - 1)){
                LOG_ANIM("[show_logo_common]dst_addr= 0x%08x, color_addr= 0x%08x, i= %d, j=%d\n", *dst_addr, *color_addr, i , j);
            }
        }
    }
}