如何取得适合自己屏幕大小的图片?


如何取得适合自己屏幕大小的图片,本人在搞TFT显示图片时浪费了好多时间,现把经验中总结下来的用法总结如下,供各位道上的学习TFT的参考。

在你所学的arm开发板中,我用的是fm3(富士通mb9b系列的),如果例程中显示图片是用for(i=0;i

{

 Write_data(tupian[i];)

}

我们都知道颜色是以双字节来定义的,比如说0x0000表示black;

如果你的例程中并不是write_data(高,低);(我记得stm32系列就是这么写的)。那么上边的i就要求用0xxxxx这种双字节的数组来表示。不用再改总线,还要将数组移位,本人认为如果例程不是你写的就别来回改了,没必要,

先来看看我的例程,如下

#define black      0x0000  

#define blue    0x001F  

#define green   0x07E0  

#define cyan    0x07FF  

#define red     0xF800  

#define yellow  0xFFE0  

#define white   0xFFFF  

                        

#define LCD_WIDTH    240

#define LCD_HEIGHT    320

**************************************************************************

void DrawPicture(uint xs,uint xe,uint ys,uint ye)

{

  unsigned long int   i;

 

 

  SetWindow(xs, xe, ys, ye);

  SetWindow_xy(xs,ys);

 write_command(0x0022);

  for (i=0;i<(xe*ye);i++)

  {

    

      write_data(qq[i]);

    

         // ili9320_Delay(50);

     

  }

  //Set_Cs;

}

void write_command(uint16_t cmd)

{   

 

    LCD_RS = 0;

    *(LCD_BASE) = cmd;

 

}

 

//-------------------------LCD write data -------------------------

void write_data(uint16_t data)

{

    LCD_RS = 1;

    __no_operation();

    __no_operation();

    //*(LCD_BASE) =(uint8_t)data;

      //*(LCD_BASE) =(uint8_t)data<<8;

   *(LCD_BASE) =data;

 

  

}

int32_t main(void)

{

  

 

    FM3_GPIO->PFR4 = 0x0000;    // Poart4 for gpio

    FM3_GPIO->PDOR4 = 0x003C;   // P42-P45 output 1

    FM3_GPIO->DDR4 = 0x003C;    // P42-P45: LED1-LED4, output;

                                // P40,P41,P48:key2,key3,key4, input

    FM3_GPIO->PFR7 = 0x0000;    // Poart7 for gpio

    FM3_GPIO->DDR7 = 0x0008;    // P73, output;

 

    FM3_GPIO->PFR6 = 0x0000;    // Poart6 for gpio

    FM3_GPIO->DDR6 = 0x0024;    // P64:key1, input; P65 LCD back light, output

                                // P62, LCD RS select,output

   

 

    init_extbus();      // 初始化外部总线

    delay(10);

 

    LCD_BKLIGHT = 1;

    delay(5);

  

 

    TM280_HX8347G_Initial_code();   //初始化LCD屏,清成白色

    delay(10); 

    clr_lcd();

   

  DrawPicture(0,239,0,319);  //x轴的起、末:Y轴的起末

像以上按着我的例程来说,在屏幕上显示图片时问题就出现了,如果直接用image2lcd很遗憾的告诉您,它生成的图片数组是单字节的(0xxx),让它显示在屏幕上根本就不行,如果手上有图片,可是你发现当你用bmp2rgb软件来转换时发现转换完后,数组里竟是空的,你开始怀疑软件真烂?试一次还是这样,换台电脑结果还是一样。如果你特意找一张24位的bitmap(bmp)图片,你再用bmp2rgb来转换发现成功了,并且都是双字节数组,然后开始研究为什么?

其实,在我目前看来,bmp2rgb软件只能转换24位的bmp格式的数组并且是单字节,如果我们需要双字节的,但手上仅有一个16位图的图片(用bmp2rg打开一开便知。)好了,如果此两款软件你同时拥有,先将此16位的图片用image2lcd打开如图

再转换成24位的bmp格式图,再将生成的图片用bmp2rgb软件打开

将宽高设置为屏幕的大小像素,点convert,ok!大功告成!

本人愚钝花了半天的时间卡在这了,高人指点!特此分享

                                                                                

sitemap