欢迎光临
我们一直在努力

图像缩小算法(保留丰富像素点)地图缩小算法

针对邻近插值算法更改的一个版本,原因邻近插值算法会丢失掉一些像素,这个版本图像缩放不会导致像素丢失的问题,未优化版本,有兴趣供参考,本文做整理记录

//
void map_zoom(loadmap_t *dst_map ,loadmap_t *src_map, int zoom_factor)
{
  //dst_map  输出图像结构 src_map输入图像结构 zoom_factor图像缩小系数
  dst_map->frame.w = ceil((double)src_map->frame.w / zoom_factor);
  dst_map->frame.h = ceil((double)src_map->frame.h / zoom_factor);
  
  int dst_width = dst_map->frame.w;
  int dst_height = dst_map->frame.h;
  int src_width = src_map->frame.w;
  int src_height = src_map->frame.h;
  int dstx,dsty;
  
  dst_map->ori_img_buf = NULL;
  xfree(dst_map->ori_img_buf);
  dst_map->ori_img_buf = (unsigned char * )xmalloc(dst_width * dst_height, "relocation zoom map");
  unsigned char *dst = dst_map->ori_img_buf;
  unsigned char *src = src_map ->ori_img_buf;
  
  if (  (0 == dst_width) || (0 == dst_height)
      ||(0 == src_width) || (0 == src_height)) return;
  for (int x = 0; x < src_width; x++)
  {
    for (int y = 0; y < src_height; y++)
    {
      dsty = y / zoom_factor;
      dstx = x / zoom_factor;
      if( (src[ y * src_width + x] == MAP_HIT_FLAG) &&
         (dst[dsty * dst_width + dstx] != MAP_HIT_FLAG))
      {
        dst[dsty * dst_width + dstx] = MAP_HIT_FLAG;
      }
    }
  }
}
赞(0) 打赏
未经允许不得转载:huangea的博客 » 图像缩小算法(保留丰富像素点)地图缩小算法
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

有趣的网站

联系我们联系我们

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏