📄 my_pic.c
字号:
for(i=0;i<7;i++)
{
_pic_[35+i].P_x =24+i*(64+24);
_pic_[35+i].P_y =130;
}*/
//others _pic_
}
// tell the key range on screen, use struct Key[_KEYNUMBER]
void init_key_range(void)
{
int i;
for(i=0;i<_KEYNUMBER;i++)
{
Key[i].K_press=0;
Key[i].K_bet=0;
}
/* for(i=0;i<7;i++)
{
Key[21+i].K_x0 =24+i*(64+24);
Key[21+i].K_x1 =24+i*(64+24)+63;
Key[21+i].K_y0 =10;
Key[21+i].K_y1 =52;
}
for(i=0;i<7;i++)
{
Key[28+i].K_x0 =24+i*(64+24);
Key[28+i].K_x1 =24+i*(64+24)+63;
Key[28+i].K_y0 =70;
Key[28+i].K_y1 =112;
}
for(i=0;i<7;i++)
{
Key[35+i].K_x0 =24+i*(64+24);
Key[35+i].K_x1 =24+i*(64+24)+63;
Key[35+i].K_y0 =130;
Key[35+i].K_y1 =172;
}*/
//others Key[1-_KEYNUMBER]
}
// if total picture size <4M or 6M,
void Copy_all_pic_to_Tmem(void)
{
int i;
//copy ground pic
// Copyb16_from_flash_to_texture_new(Gnd0.PIC_RAM_add, Gnd0.PIC_TMEM_add,
// Gnd0.PIC_cols, Gnd0.PIC_lines, 10, 9);
// copy mouse picture
// Copyb16_from_flash_to_texture_new(mouse0.PIC_RAM_add, mouse0.PIC_TMEM_add,
// mouse0.PIC_cols, mouse0.PIC_lines, 6, 6);
//copy girl pic
// Copyb16_from_flash_to_texture_new(girl0.PIC_RAM_add, girl0.PIC_TMEM_add,
// girl0.PIC_cols, girl0.PIC_lines, 7, 8);
//copy others _All_pic_add[_PIC_NUMBER]
// Copyb16_from_flash_to_texture_new(_All_pic_add[0].PIC_RAM_add,_All_pic_add[0].PIC_TMEM_add,
// _All_pic_add[0].PIC_cols, _All_pic_add[0].PIC_lines, 10, 7);
// Copyb16_from_flash_to_texture_new(_All_pic_add[1].PIC_RAM_add,_All_pic_add[1].PIC_TMEM_add,
// _All_pic_add[1].PIC_cols, _All_pic_add[1].PIC_lines, 10, 7);
i=0;
Copyb16_from_flash_to_texture_new(_All_pic_add[i].PIC_RAM_add,_All_pic_add[i].PIC_TMEM_add,
_All_pic_add[i].PIC_cols, _All_pic_add[i].PIC_lines, 10, 9);
i=1;
Copyb16_from_flash_to_texture_new(_All_pic_add[i].PIC_RAM_add,_All_pic_add[i].PIC_TMEM_add,
_All_pic_add[i].PIC_cols, _All_pic_add[i].PIC_lines, 7, 7);
//copy others _All_pic_add[_PIC_NUMBER]
}
//mybe add enlarge rate later
void Draw_my_pic(unsigned short mode, My_Pic *p_mypic, unsigned int Trans_color)
{
Write_Packet_com(mode,X_O+(p_mypic->P_x),(p_mypic->P_y),
(p_mypic->P_cols)+(p_mypic->P_x)+X_O-1,(p_mypic->P_lines)+(p_mypic->P_y)-1,
0,0,512,0,0,(512),Trans_color,(p_mypic->P_TMEM_add),(p_mypic->P_size));
}
void Draw_my_pic_with_enlarge(unsigned short mode, My_Pic *p_mypic, unsigned int Trans_color,
float rate)
{
Write_Packet_com(mode,X_O+(p_mypic->P_x),(p_mypic->P_y),
(p_mypic->P_cols)*rate+(p_mypic->P_x)+X_O-1,(p_mypic->P_lines)*rate+(p_mypic->P_y)-1,
0,0,512/rate,0,0,(512)/rate,Trans_color,(p_mypic->P_TMEM_add),(p_mypic->P_size));
}
//revcover gnd
void Recover_gnd(My_Pic *p_front, My_Pic *p_back_g)
{
if(p_front->P_move>0)
{
Write_Packet_com(COMM_MODE,(p_front->P_r_x + X_O),(p_front->P_r_y),
(p_front->P_r_x)+ X_O +(p_front->P_cols)-1,(p_front->P_r_y)+(p_front->P_lines)-1,
(p_front->P_r_x),(p_front->P_r_y),512,0,0,(512),0,
(p_back_g->P_TMEM_add),(p_back_g->P_size));
}
}
//for the purpuse of recover GND, the last 2 X Y should be known.
void Exchange_oldXY(char bank_switch, My_Pic *p_mypic)
{
if(p_mypic->P_move>0)
{
if(_TIE_CI==p_mypic->P_move)
{
p_mypic->P_x = x_position;
p_mypic->P_y = y_position;
}
if(0 == bank_switch)
{
p_mypic->P_r_x = p_mypic->P_last1_x;
p_mypic->P_r_y = p_mypic->P_last1_y;
p_mypic->P_last1_x = p_mypic->P_x;
p_mypic->P_last1_y = p_mypic->P_y;
}
else if(1 == bank_switch)
{
p_mypic->P_r_x = p_mypic->P_last0_x;
p_mypic->P_r_y = p_mypic->P_last0_y;
p_mypic->P_last0_x = p_mypic->P_x;
p_mypic->P_last0_y = p_mypic->P_y;
}
p_mypic->P_move--; //2,1,0
}
}
//compare the position of mouse, find which key is pressed.
int Which_key_is_pressed(void)
{
int i;
for(i=0;i<_KEYNUMBER;i++)
{
if((x_position>=Key[i].K_x0)&&(x_position<=Key[i].K_x1)
&&(y_position>=Key[i].K_y0)&&(y_position<=Key[i].K_y1))
{
return i;//key number
}
}
return -1; //not a key
}
//if _pic_[i].P_disp==1, display
void Draw_all_small_pic_with_enlarge_rate(void)
{
int i;
for(i=0;i<_DISP_PIC_NUM;i++)
{
if(_pic_[i].P_disp)
{
Draw_my_pic_with_enlarge(TRANS_MODE, &_pic_[i], 0, 1);
}
}
}
//search the id in _All_pic_add[_PIC_NUMBER] and change Des_pic
/*int change_pic(My_Pic *Des_pic, U8 pic_id)
{
int i;
for(i=0;i<_PIC_NUMBER;i++)
{
if(_All_pic_add[i].PIC_name == pic_id)
{
// Des_pic->P_RAM_add = _All_pic_add[i].PIC_RAM_add; //(U16*)0x2200000;
Des_pic->P_TMEM_add = _All_pic_add[i].PIC_TMEM_add;//0x50000;
Des_pic->P_cols = _All_pic_add[i].PIC_cols;//640;
Des_pic->P_lines = _All_pic_add[i].PIC_lines;//480;
Des_pic->P_size = _All_pic_add[i].PIC_size;
return i;
}
}
return -1;//couldn't find the id
}*/
//increase the id in _All_pic_add[_PIC_NUMBER] and change Des_pic by ++ or --
//find out the P_key_id == Key_number and change this pic
int change_pic_plus(U8 Key_number, U8 dir)//dir==1 ++, dir==0 --
{
int i;
U8 pic_id;
int pic_num;
if((0==Key[Key_number].K_press)&&(1==dir))
{
Key[Key_number].K_press =1; //change key state to "press"
}
else if((1==Key[Key_number].K_press)&&(0==dir))
{
Key[Key_number].K_press =0; //change key state to "not press"
}
else
{
return -1; //error
}
for(i=0;i<_DISP_PIC_NUM;i++)
{
if(_pic_[i].P_key_id == Key_number)
{
pic_id = _pic_[i].P_id;
pic_num = i;
break;
}
}
if(dir)
pic_id++;
else
pic_id--;
_pic_[pic_num].P_id = pic_id;
for(i=0;i<_PIC_NUMBER;i++)
{
if(_All_pic_add[i].PIC_name == pic_id)
{
_pic_[pic_num].P_RAM_add = _All_pic_add[i].PIC_RAM_add; //(U16*)0x2200000;
_pic_[pic_num].P_TMEM_add = _All_pic_add[i].PIC_TMEM_add;//0x50000;
_pic_[pic_num].P_cols = _All_pic_add[i].PIC_cols;//640;
_pic_[pic_num].P_lines = _All_pic_add[i].PIC_lines;//480;
_pic_[pic_num].P_size = _All_pic_add[i].PIC_size;
return i;
}
}
return -1;//couldn't find the id
}
//recover all key to non-pressed state
void recover_all_key(void)
{
int i;
for(i=0;i<_KEYNUMBER;i++)
{
if(1==Key[i].K_press)
{
change_pic_plus((U8)i, 0);
Key[i].K_press=0;
}
}
}
//blend_rate = 0--100
void Draw_my_pic_blend(unsigned short mode, My_Pic *p_mypic, int blend_rate)
{
// Write_Packet_blend(0x4F0A,0,0,640,480,0,0,512,0,0,(512*1.1),SrcAlpC,0x02,DesAlpC,0x08,0x52000,0x009b);
unsigned int SrcAlpC, DesAlpC;
unsigned char Alp_R, Alp_G, Alp_B;
Alp_R=0xff*blend_rate/100;//ff;
Alp_G=0xff*blend_rate/100;//ff;
Alp_B=0xff*blend_rate/100;//ff;
DesAlpC=0x00ffffff;
SrcAlpC = ((Alp_R)<<16)|((Alp_G)<<8)|(Alp_B);
Write_Packet_blend(mode,X_O+(p_mypic->P_x),(p_mypic->P_y),
(p_mypic->P_cols)+(p_mypic->P_x)+X_O-1,(p_mypic->P_lines)+(p_mypic->P_y)-1,
0,0,512,0,0,(512),
SrcAlpC,0x02,DesAlpC,0x08,
(p_mypic->P_TMEM_add),(p_mypic->P_size));
}
void Draw_my_pic_rotate(unsigned short mode,My_Pic *p_mypic)
{
int Obj_Size=128;
int DstSizeX;
int DstSizeY;
int SrcX,SrcY;
int MatrixA;
int MatrixB;
int MatrixC;
int MatrixD;
DstSizeX=(int)(Obj_Size*1.414213)-1;
DstSizeY=(int)(Obj_Size*1.414213)-1;
SrcX=(int)(512.0* (Obj_Size/2-Obj_Size*sin(3.14159/4.+rotate_angle)));
SrcY=(int)(512.0* (Obj_Size/2-Obj_Size*cos(3.14159/4.+rotate_angle)));
MatrixA = (int)(512.0*cos(rotate_angle));
MatrixB =-(int)(512.0*sin(rotate_angle));
MatrixC =-MatrixB;
MatrixD = MatrixA;
//Write_Packet_com(0x4728,32,32,32+DstSizeX,32+DstSizeY,SrcX,SrcY,
// MatrixA, MatrixB, MatrixC, MatrixD, 0x00,0x48000,0x00a4);
//put rotation pic
Write_Packet_rotate(mode,(p_mypic->P_x),(p_mypic->P_y),
(p_mypic->P_x)+DstSizeX,(p_mypic->P_y)+DstSizeY,
SrcX,SrcY,
MatrixA,MatrixB,MatrixC,MatrixD,0x00,
(p_mypic->P_TMEM_add),(p_mypic->P_size));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -