Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1219135
  • 博文数量: 788
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 7005
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-19 15:52
文章存档

2017年(81)

2011年(1)

2009年(369)

2008年(337)

分类:

2009-03-13 10:34:44



类似CAD、GOOGLE   EARTH的效果,哪个高手给说道说道

1   CAD不是BMP图片,是一种矢量图  
  2   GoogleEarth是用了多级图片,不同的缩放级别显示不同的图片

GoogleEarth在同一级别缩放也是相当平滑的,不知道怎么实现的,高手请继续说

有一些平滑算法,可以让图片,看起来有些平滑...

缩放使用插值算法,比如双线性插值,样条插值等等

同意楼上,选取好的插值算法。

有   开源项目..   去   sf查查   看

//图像缩放过程,带插值运算(线性插值法)  
  //参数:矩形区域,源图像  
  //注意:此代码只支持24或32位色的情况(对于15或16位色需要按位拆开—因为不拆开的话  
  //             会在计算中出现不期望的进位或借位,导致图像颜色混乱—处理较麻烦;对于8位  
  //             及8位以下索引色需要查调色板,并且需要重索引,也很麻烦,所以都不支持;但  
  //             8位灰度图像可以支持)。另外代码中加入一些在图像边缘时防止访问越界的代码。  
  procedure   StretchLinear(Dest,   Src:   TBitmap);   //   only   for   24bit   bitmap  
  var  
      sw,   sh,   dw,   dh,   B,   N,   x,   y,   i,   j,   k,   nPixelSize:   DWord;  
      pLinePrev,   pLineNext,   pDest,   pA,   pB,   pC,   pD:   PByte;  
  begin  
      sw   :=   Src.Width   -1;  
      sh   :=   Src.Height   -1;  
      dw   :=   Dest.Width   -1;  
      dh   :=   Dest.Height   -1;  
      nPixelSize   :=   3;               //GetPixelSize(Dest.PixelFormat)  
      for   i   :=   0   to   dh   do   begin  
          pDest   :=   Dest.ScanLine[i];  
          y   :=   i   *   sh   div   dh;  
          N   :=   dh   -   i   *   sh   mod   dh;  
          pLinePrev   :=   Src.ScanLine[y];  
          Inc(y);  
          if   N   =   dh   then   begin  
              pLineNext   :=   pLinePrev;  
          end   else   begin  
              pLineNext   :=   Src.ScanLine[y];  
          end;  
          for   j   :=   0   to   dw   do   begin  
              x   :=   j   *   sw   div   dw   *   nPixelSize;  
              B   :=   dw   -   j   *   sw   mod   dw;  
              pA   :=   pLinePrev;  
              Inc(pA,   x);  
              pB   :=   pA;  
              Inc(pB,   nPixelSize);  
              pC   :=   pLineNext;  
              Inc(pC,   x);  
              pD   :=   pC;  
              Inc(pD,   nPixelSize);  
              if   B   =   dw   then   begin  
                  pB   :=   pA;  
                  pD   :=   pC;  
              end;  
              for   k   :=   0   to   nPixelSize   -1   do   begin  
                  pDest^   :=   Byte(DWord(   (B   *   N   *   DWord(pA^   -   pB^   -   pC^   +   pD^)   +   dw   *   N   *   pB^  
                                                              +   dh   *   B   *   pC^   +   (dw   *   dh   -   dh   *   B   -   dw   *   N)*   pD^  
                                                              +   dw   *   dh   div   2)   div   (dw   *   dh)   ));  
                  Inc(pDest);  
                  Inc(pA);  
                  Inc(pB);  
                  Inc(pC);  
                  Inc(pD);  
              end;  
          end;  
      end;  
  end;  
 



--------------------------
新闻:中国移动将简化资费套餐至10套以内
导航:博客园首页  知识库  新闻  招聘  社区  小组  博问  网摘  找找看
阅读(1077) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~