void ImageScale(CImage *dst, CImage *src, double alpha)      //非整数倍缩放
{int nSize; BYTE **list, *sc ,*lp; int Dx, Dy, x, y, bpd; Dx=(int)(alpha * src->GetWidth());                            //计算结果位图宽度 Dy=(int)(alpha * src->GetHeight());                      //计算结果位图高度 dst -> Destroy(); dst ->Create(Dx, Dy, src->GetBPP() );                     //建立结果位图 bpd = src->GetBPP()/8;                                   //每个画素占字节nSize = (Dx * src->GetBPP() + 31) / 32 * 4;             //计算工作单元大小 sc = (BYTE*) malloc(nSize);                                 //申请像素行工作单元 list = (BYTE**) malloc(src->GetHeight() * sizeof(BYTE*));   // 申请指针数组 for (int i=0;i<src->GetHeight();i++) list[i] = (BYTE*) src->GetPixelAddress(0, i);           //生成二维数组 for (int j=0;j<Dy;j++) { y=int(j/alpha+0.5);for (int i=0;i<Dx;i++) { x=int(i/alpha+0.5);                                   //x1,y1为整数部分 if (x>src->GetWidth()||y>src->GetHeight())      // 范围检查 {continue; }if(x==src->GetWidth())     x--;if(y==src->GetHeight())    y--;memcpy(&sc[i*bpd],&list[y][x*bpd],bpd);             //从源位图复制像素数据  }lp=(BYTE*)dst->GetPixelAddress(0,j);                 //处理结果总结果位图 memcpy(lp,sc,Dx*bpd);                   }free(sc);                                                  //释放工作单元 free(list);
}
void ImageRotation(CImage *dst, CImage *src, double alpha)
{int ww, Dx, Dy, bpd; double centerx, centery, sintheta, costheta; double X1, Y1, X2, Y2, theta, xx, yy, rr; BYTE **list, *sc, *lp; int x, y; Dx=src->GetWidth(); Dy=src->GetHeight(); sc=(BYTE*)malloc(2*(Dx*src->GetBPP()+31)/32*4); //申请工作单元 list=(BYTE**)malloc(Dy*sizeof(BYTE*));                //对原位图建立二维数组 for (int i=0;i<Dy;i++) {list[i]=(BYTE*)src->GetPixelAddress(0, i); }centerx=Dx/2.0+0.5;                                    //计算位图中心位置 centery=Dy/2.0+0.5; rr=sqrt(centerx*centerx+centery*centery);            //计算对角线长度 theta=atan(centery/centerx); X1=fabs(rr*cos(alpha+theta))+0.5; Y1=fabs(rr*sin(alpha+theta))+0.5; X2=fabs(rr*cos(alpha-theta))+0.5; Y2=fabs(rr*sin(alpha-theta))+0.5; if (X2>X1) X1 = X2;                               //得外接矩形宽度 if (Y2>Y1) Y1 = Y2;                               //外接矩形高度 ww=(int)(2 * X1); dst->Destroy(); dst->Create(ww,(int)(2*Y1),src->GetBPP());     //建立结果位图 bpd = src->GetBPP()/8;sintheta = sin(alpha); costheta = cos(alpha); for (int j=(int)(centery-Y1),Yd=0;j<=(centery + Y1);j++,Yd++) { if (src->GetBPP()==8) memset(sc,255,ww);                         //256色位图像素行置背景值 else memset(sc,255,ww*bpd);                     //真彩色位图像素行置背景值 for (int i=(int)(centerx-X1),Xd=0;i<=centerx+X1;i++,Xd+=bpd) { xx=centerx+costheta*(i-centerx)+sintheta*(j-centery); yy=centery-sintheta*(i-centerx)+costheta*(j-centery); x=(int)(xx+0.5); y=(int)(yy+0.5); if (x<0||x>= src->GetWidth()||y<0||y>=src->GetHeight()) continue; if(x==src->GetWidth())       x--;if(y==src->GetHeight())    y--;memcpy(&sc[Xd],&list[y][x*bpd],bpd);        //从源位图复制像素数据 } lp=(BYTE*)dst->GetPixelAddress(0,Yd);            //处理结果总结果位图 memcpy(lp,sc,ww*bpd);} free(list);                                          //释放工作单元 free(sc);
}

CImage图像旋转与缩放相关推荐

  1. opencv 图像仿射变换 计算仿射变换后对应特征点的新坐标 图像旋转、缩放、平移...

    常常需要最图像进行仿射变换,仿射变换后,我们可能需要将原来图像中的特征点坐标进行重新计算,获得原来图像中例如眼睛瞳孔坐标的新的位置,用于在新得到图像中继续利用瞳孔位置坐标. 仿射变换在:http:// ...

  2. HTML5图片旋转并保存,html5图像旋转、缩放并上传

    普通 css 的旋转缩放只是样式发生旋转,图片本质上还是没有旋转缩放的,想要图片本质旋转或者缩放,需要借助 canvas 的图像生成能力 以图像旋转 90 度并且缩放 0.5 倍为例 思路获取图片元素 ...

  3. 数据增强之图像旋转及坐标对应(附代码)

    海康威视研究院ImageNet2016竞赛经验分享 深度学习之图像的数据增强 data augmentation 数据增强方法总结 图片的数据增强(Data Augmentation)方法 openc ...

  4. opencv 图像旋转_用Dlib和OpenCV还能做什么?这个开源项目实现了驾驶员疲劳检测...

    Dlib 和 OpenCV 这两个库已经在深度学习和人脸识别领域逐渐有了自己的一席之地,基于它们的各种开源项目的越来越多,今天 Gitee 上这个开源项目也是基于 Dlib 和 OpenCV 的,具体 ...

  5. python函数图像平移_[Python图像处理]六.图像缩放,图像旋转,图像翻转与图像平移...

    图像缩放 图像缩放主要是调用resize()函数实现,result = cv2.resize(src, dsize[, result[.fx, fy[,interpolation]]])  其中src ...

  6. opencv python 图像缩放/图像平移/图像旋转/仿射变换/透视变换

    Geometric Transformations of Images 1图像转换 OpenCV提供了两个转换函数cv2.warpAffine和cv2.warpPerspective,可以使用它们进行 ...

  7. python如何移动图片_python之详细图像仿射变换讲解(图像平移、旋转、缩放、翻转),一文就够了,赶紧码住...

    仿射变换简介 什么是放射变换 图像上的仿射变换, 其实就是图片中的一个像素点,通过某种变换,移动到另外一个地方. 从数学上来讲, 就是一个向量空间进行一次线形变换并加上平移向量, 从而变换到另外一个向 ...

  8. OpenCV_04 几何变换:图像缩放+图像平移+图像旋转+仿射变换+透射变换+图像金字塔

    1 图像缩放 缩放是对图像的大小进行调整,即使图像放大或缩小. API cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR) 参 ...

  9. MFC空间几何变换之图像平移、镜像、旋转、缩放

    本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行讲解,主要通过MFC单文档视图实现显示BMP图片空间几何变换,包括图像平移.图形 ...

最新文章

  1. iOS使用支付宝支付步骤
  2. STM32按键控制led四种方法
  3. Linux服务器集群系统(一)--转
  4. win10蓝屏提示重新启动_Windows 10系统出现蓝屏、CPU占用高,你们是如何解决的?...
  5. Java中集合中根据对象的某个属性去重
  6. SpringBoot-@Conditional
  7. 知识主题间先序关系挖掘
  8. 6.2二叉树及二叉树存储结构
  9. Python 函数(参数组合)
  10. 手机上有没有学python的软件-有哪些可以在手机上敲Python代码的App
  11. std::thread的使用
  12. 凸优化第二章凸集 2.2重要例子
  13. Raki的读paper小记:FLAT: Chinese NER Using Flat-Lattice Transformer
  14. ModelSim的使用详解
  15. Windows聚焦壁纸保存方法
  16. html背景色不透明度,css怎么设置颜色不透明度?
  17. 现在大多数论文存在的弊病——可重复性
  18. 300行python代码从零开始构建基于知识图谱的电影问答系统4-用户问题预处理
  19. GitHub 上100个优质前端项目整理,非常全面!
  20. Android notes

热门文章

  1. Zotero使用指南06:Markdown笔记
  2. 有关STP测试的小实验
  3. Python中使用,YOLOv5实现视觉识别螺丝
  4. 机器学习 第三节 第八课
  5. Python篇之编译py文件为pyc文件的方法总结
  6. python二进制数据存入数据库_python+ mysql存储二进制流的方式
  7. 轻巧的jQuery提示框插件Tipso演示
  8. Adobe Creative Cloud for mac无法连接至服务器的解决方法
  9. CrawlSpider爬取拉钩
  10. java 获取浏览器名称及版本号