如何取得适合自己屏幕大小的图片?
如何取得适合自己屏幕大小的图片,本人在搞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!大功告成!
本人愚钝花了半天的时间卡在这了,高人指点!特此分享