分享

数码相框简单图片特效

 點點滴滴 2011-03-02

数码相框简单图片特效



思路总结:

(STM32 cortex M3 -- 数码相框)

1. 静态显示一张图片:

     遍历所有像素点,一一显示。

2. 图片放大显示:

     假如要放大为原来的四倍那么大,即长和宽都是原来的二倍。一 二、三 四.......两行两行,

     两列两列的像素值完全一样。

3. 图片缩小显示:

      跟放大相反,还拿四倍为例。在行像素上,隔一行取一行,隔一列取一列。

4. 百叶窗效果:

      把静态显示图片分块显示,按列为单位变化。

5. 逐渐变黑:

      16真彩色的图片,红绿蓝的二进制分别是五六五。改变红绿蓝的色度值,越小就越黑,当全为

      零的时候就是黑屏了。逐渐减小实现渐变。

6. 半透明设置:

      图片像素隔一行显示一行。这样一半本章图片,一半前张图片,达到半透明效果。

7. 逐渐变白:

      事实证明用变黑的反过程是不好用的。我们可以先白色清屏。然后写一张图片的像素点越来越

      稀少。均匀减少。每一次写之前都白色清屏。这样就达到逐渐变白的效果了。并且还可以根据

      像素稀少程度表示不同的透明度。

 

 

部分例程代码如下:

 


void display_liu(void)
{
 int i;
 unsigned int dd;
 LCD_Clear(White);

 address_set(0,0,239,319);
 for(i=0; i<76800;i++)
 {
  dd=(0x00|xiaoxiao[i*2+1])<<8;
  dd = dd|xiaoxiao[i*2];                  //把8位合并成16位的。
  LCD_WriteRAM(dd);  
 }
 Delay(0xaffff);
 Delay(0xaffff);
 Delay(0x5ffff);
}



void big_liu(void)
{
 int i, t = 0, k = 0;
 unsigned int dd;
 LCD_Clear(White);

 for(i=19200; i<57600;i++)
 {
  
  if(i20>=80 && i20<240)
  
   if(t >= 319)
   {
    t = 0;
    k += 2;
   }
    

   address_set(k,t,k,319);
   dd=(0x00|xiaoxiao[i*2+1])<<8;
   dd = dd|xiaoxiao[i*2];                  //把8位合并成16位的。
   LCD_WriteRAM(dd);
   LCD_WriteRAM(dd);

   address_set(k+1,t,k+1,319);
   LCD_WriteRAM(dd);
   LCD_WriteRAM(dd);
   t += 2;

  }
    
 }
 Delay(0xaffff);
 Delay(0xaffff);
 Delay(0x5ffff);
}



void small_liu(void)
{
 int i;
 unsigned int dd;
 LCD_Clear(White);

 address_set(0,0,119,159);
 for(i = 0; i < 38400; i++)
 {
  if(i0 == 0)
  i += 160;
  dd=(0x00|xiaoxiao[i*4+1])<<8;
  dd = dd|xiaoxiao[i*4];                  //把8位合并成16位的。
  LCD_WriteRAM(dd); 
 }

 address_set(0,160,119,319);
 for(i = 0; i < 38400; i++)
 {
  if(i0 == 0)
  i += 160;
  dd=(0x00|xiaoxiao[i*4+1])<<8;
  dd = dd|xiaoxiao[i*4];                  //把8位合并成16位的。
  LCD_WriteRAM(dd); 
 }
 address_set(120,0,239,159);
 for(i = 0; i < 38400; i++)
 {
  if(i0 == 0)
  i += 160;
  dd=(0x00|xiaoxiao[i*4+1])<<8;
  dd = dd|xiaoxiao[i*4];                  //把8位合并成16位的。
  LCD_WriteRAM(dd); 
 }
 address_set(120,160,239,319);
 for(i = 0; i < 38400; i++)
 {
  if(i0 == 0)
  i += 160;
  dd=(0x00|xiaoxiao[i*4+1])<<8;
  dd = dd|xiaoxiao[i*4];                  //把8位合并成16位的。
  LCD_WriteRAM(dd); 
 }
 
 Delay(0xaffff);
 Delay(0xaffff);
 Delay(0x5ffff); 
}



void baiye(void)
{
 int i,j,k,t;
 unsigned int dd;

 LCD_Clear(White);

 for(j = 0; j < 40; j++)      //每一叶写40列
 {
  for(k = 0; k < 6; k++)     //写六叶的每一列
  {
   address_set(k*40+j,0,(k+1)*40+j-1,319);
   for(i = 0; i <320 ; i++)       //写一列
   {
    t = i+k*40*320+j*320;
    dd = (0x00|xiaoxiao[t*2+1])<<8;
    dd = dd|xiaoxiao[t*2];   
    LCD_WriteRAM(dd); 
   
  }
  Delay(0x0ffff);
 }
}


unsigned int modify_liu(unsigned char a,unsigned b,int k)
{

 unsigned char aa = a, bb = b;
 unsigned int ab[] = {0x7bef,0x39e7,0x18e3,0x0861,0x0020,0x0000};
 unsigned int dd;
   
 dd = (0x00|bb)<<8;
 dd = dd|aa;
 dd >>= k;
 dd &= ab[k-1];
    
 return dd;
 
}



void qian_liu(void)
{
 int k, i;
 unsigned int dd;

 LCD_Clear(White);
 
 for

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多