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

📄 neffect.h

📁 NEO SDK是一个跨平台的免费开源图形软件开发包。它支持基本绘图、多种格式图形显示、鼠标操 作、扩展内存和扩充内存的操作、时钟、音频播放、多种字体的汉字及英文显示等等特性;更激动人心的是
💻 H
📖 第 1 页 / 共 2 页
字号:
            }
         }
      }
      #endif
   }
   #ifndef NEO_16bit_bmp_unused
   else if (g_bmpbits == 16)
   {
      /*RGB16 *buf = (RGB16 *)buffer;*/
      /*count >>= 1; */
   }
   #endif

   #else
   char *buf = (char *)buffer; *buf += count;
   #ifndef NEO_sys_report_error_unused
   {
      Errinfo_t error = {"vivid", ROUTINE_UNACTIVE, 1};
      throw_error(error);
   }
   #endif

   #endif
}


/*扫描线颜色替换*/
void scan_line_stead(void *buffer, int count/*, int line*/)
{
   #ifndef NEO_bmp_stead_unused
   int i, temp;

   if (g_bmpbits == 8)
   {
      #ifndef NEO_8bit_bmp_unused
      char *buf = (char *)buffer;
      temp = (get_color_depth() == 8? MASK_COLOR_ : MASK_COLOR_8);

      for (i = 0; i < count; ++i)
      {
         if (buf[i] == temp)
         {
            buf[i] = (char)g_bmp_param;
         }
      }
      #endif
   }
   #ifndef NEO_24bit_bmp_unused
   else if (g_bmpbits == 24)
   {
      RGB24 *buf = (RGB24 *)buffer;

      temp = 5 - g_green_bit;
      count /= sizeof(RGB24);
      for (i = 0; i < count; ++i)
      {
         if ( ((buf[i].r>>3)|((buf[i].g>>g_green_bit)<<5)|((buf[i].b>>3)<<11)) == MASK_COLOR_)
         {
            buf[i].b = (g_bmp_param & 0xf800) >> 8;
            buf[i].g = (g_bmp_param & 0x7e0) >> temp;
            buf[i].r = (g_bmp_param & 0x1f) << 3;
         }
      }
   }
   #endif
   #ifndef NEO_16bit_bmp_unused
   else if (g_bmpbits == 16)
   {
      RGB16 *buf = (RGB16 *)buffer;

      count >>= 1; /*比count /= sizeof(RGB16)快*/
      for (i = 0; i < count; ++i)
      {
         if (buf[i].color == MASK_COLOR_)
         {
            buf[i].color = g_bmp_param;
         }
      }
   }
   #endif

   #else
   char *buf = (char *)buffer; *buf += count;
   #ifndef NEO_sys_report_error_unused
   {
      Errinfo_t error = {"stead", ROUTINE_UNACTIVE, 1};
      throw_error(error);
   }
   #endif

   #endif
}


/*扫描线水平翻转*/
void scan_line_h_flip(void *buffer, int count/*, int line*/)
{
   #ifndef NEO_bmp_h_flip_unused
   int i, temp;
   int r,g,b;

   if (g_bmpbits == 8)
   {
      #ifndef NEO_8bit_bmp_unused
      char *buf = (char *)buffer;
      r = count >> 1;

      for (i = 0; i < r; ++i)
      {
         temp = buf[i];
         buf[i] = buf[count - i];
         buf[count - i] = temp;
      }
      #endif
   }
   #ifndef NEO_24bit_bmp_unused
   else if (g_bmpbits == 24)
   {
      RGB24 *buf = (RGB24 *)buffer;

      temp = (int)(count / 3);
      count = temp >> 1;
      for (i = 0; i < count; ++i)
      {
         r = buf[i].r; g = buf[i].g; b = buf[i].b;
         buf[i].r = buf[temp - i].r;
         buf[i].g = buf[temp - i].g;
         buf[i].b = buf[temp - i].b;
         buf[temp - i].r = r; buf[temp - i].g = g; buf[temp - i].b = b;
      }

   }
   #endif
   #ifndef NEO_16bit_bmp_unused
   else if (g_bmpbits == 16)
   {
      RGB16 *buf = (RGB16 *)buffer;

      r = (count >>= 1);
      count >>= 1;
      for (i = 0; i < count; ++i)
      {
         temp = buf[i].color;
         buf[i].color = buf[r - i].color;
         buf[r - i].color = temp;
      }
   }
   #endif

   #else
   char *buf = (char *)buffer; *buf += count;
   #ifndef NEO_sys_report_error_unused
   {
      Errinfo_t error = {"bmp_flip", ROUTINE_UNACTIVE, 1};
      throw_error(error);
   }
   #endif

   #endif
}


/*扫描线模糊效果*/
void scan_line_wublur(void *buffer, int count/*, int line*/)
{
   #ifndef NEO_bmp_wublur_unused
   int i;

   if (g_bmpbits == 24)
   {
      #ifndef NEO_24bit_bmp_unused
      RGB24 *buf = (RGB24 *)buffer;

      count /= sizeof(RGB24);
      for (i = 0; i < count - 1; ++i)
      {
            buf[i].r = (buf[i].r + buf[i + 1].r) >> 1;
            buf[i].g = (buf[i].g + buf[i + 1].g) >> 1;
            buf[i].b = (buf[i].b + buf[i + 1].b) >> 1;
      }
      #endif
   }
   #ifndef NEO_16bit_bmp_unused
   else if (g_bmpbits == 16)
   {
      count >>= 1; /*比count /= sizeof(RGB16)快*/
   }
   #endif

   #else

   char *buf = (char *)buffer; *buf += count;
   #ifndef NEO_sys_report_error_unused
   {
      Errinfo_t error = {"wu-blur", ROUTINE_UNACTIVE, 1};
      throw_error(error);
   }
   #endif

   #endif
}


/*扫描线去色效果*/
void scan_line_throw(void *buffer, int count/*, int line*/)
{
   #ifndef NEO_bmp_channel_unused
   int i, temp;

   if (g_bmpbits == 8)
   {
      #ifndef NEO_8bit_bmp_unused
      #ifndef NEO_color_depth_8_unused
      char *buf = (char *)buffer;

      if ((g_bmp_param & 0x7) == 0x7)
      {
         for (i = 0; i < count; ++i)
         {
            temp = (get_blue(buf[i]) * 3 + get_green(buf[i]) * 6 + get_red(buf[i])) / 10;
            buf[i] = (temp << 6) | (temp << 3) | temp;
         }
      }
      else
      {
         for (i = 0; i < count; ++i)
         {
            if (g_bmp_param & 0x4) buf[i] &= 0X1F;
            if (g_bmp_param & 0x2) buf[i] &= 0XE3;
            if (g_bmp_param & 0x1) buf[i] &= 0XFC;
         }
      }
      #endif
      #endif   
   }
   #ifndef NEO_24bit_bmp_unused
   else if (g_bmpbits == 24)
   {
      RGB24 *buf = (RGB24 *)buffer;

      count /= sizeof(RGB24);
      if ((g_bmp_param & 0x7) == 0x7)
      {
         for (i = 0; i < count; ++i)
         {
            if (buf[i].r == buf[i].g && buf[i].g == buf[i].b) continue;
            temp = (buf[i].r * 3 + buf[i].g * 6 + buf[i].b) / 10;
            buf[i].r = buf[i].g = buf[i].b = (Uint8)temp;
         }
      }
      else
      {
         for (i = 0; i < count; ++i)
         {
            if (g_bmp_param & 0x1) buf[i].r = 0;
            if (g_bmp_param & 0x2) buf[i].g = 0;
            if (g_bmp_param & 0x4) buf[i].b = 0;
         }
      }
   }
   #endif
   #ifndef NEO_16bit_bmp_unused
   else if (g_bmpbits == 16)
   {
      RGB16 *buf = (RGB16 *)buffer;

      count >>= 1; /*比count /= sizeof(RGB16)快*/
      if ((g_bmp_param & 0x7) == 0x7)
      {
         for (i = 0; i < count; ++i)
         {
            temp = (getb16(buf[i].color) * 3 + getg16(buf[i].color) * 6 + getr16(buf[i].color)) / 10;
            buf[i].color = (temp << 11) | (temp << 6) | temp;
         }
      }
      else
      {
         for (i = 0; i < count; ++i)
         {
            if (g_bmp_param & 0x1) buf[i].color &= 0XFFE0;
            if (g_bmp_param & 0x2) buf[i].color &= 0XF81F;
            if (g_bmp_param & 0x4) buf[i].color &= 0X07FF;
         }
      }
   }
   #endif

   #else
   char *buf = (char *)buffer; *buf += count;
   #ifndef NEO_sys_report_error_unused
   {
      Errinfo_t error = {"Channel", ROUTINE_UNACTIVE, 1};
      throw_error(error);
   }
   #endif

   #endif
}

void scan_line_define(void *buffer, int count/*, int line*/)
{
   #ifndef NEO_bmp_define_unused
   int i;

   if (g_bmpbits == 24)
   {
      #ifndef NEO_24bit_bmp_unused
      RGB24 *buf = (RGB24 *)buffer;

      count /= sizeof(RGB24);

      for (i = 0; i < count; ++i)
      {
         buf[i].r = abs(g_bmp_param - buf[i].r);
         buf[i].g = abs(g_bmp_param - buf[i].g);
         buf[i].b = abs(g_bmp_param - buf[i].b);
      }
      #endif
   }

   #else
   char *buf = (char *)buffer; *buf += count;
   #ifndef NEO_sys_report_error_unused
   {
      Errinfo_t error = {"Channel", ROUTINE_UNACTIVE, 1};
      throw_error(error);
   }
   #endif

   #endif
}

#endif /* NEO_bmp_support_unused */
#endif /* NEO_showbmp_unused */

#endif /*__NEFFECT_H__*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -