⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 my_pic.c

📁 adc 3208 上面实现图片旋转的实例
💻 C
📖 第 1 页 / 共 2 页
字号:
  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 + -