代码记录——phase16,block32

HRESULT RotateZoom(PBYTE pbSrc,int iWidth,int iHeight,double dbRotate,double dbZoom,PBYTE pbTag)
{
//int phase[17]={0};//8相位,包含端点存在17个距离 //16
//for (int i=0;i<17;i++)
//{
// double i2=1.0*i;
// phase[i]=fs(i2/8)*1024;
//}
int phase[]={,,,,,,,,,-,-,-,-,-,-,-,}; int src1x,src1y,src2x,src2y,src3x,src3y,src4x,src4y;
int drcx[],drcy[];
int angl=;//旋转45度
int middle_height=;
int middle_width=;
int rx=;
int ry=; int newheight=;
int newwidth=;
int rx0=; //插值放大后图像的旋转中心
int ry0=;
for(int y=;y<;y=y+)
{
for(int x=;x<;x=x+)
{
//正向映射入大图像中分块图像所对应的像素点
src1x=x;src1y=y;src2x=x+;src2y=y;src3x=x;src3y=y+;src4x=x+;src4y=y+;
//正向映射公式
int a=dbZoom;
drcx[]=(a*src1x-rx)*angl+(a*src1y-ry)*angl+rx0*;
drcy[]=-(a*src1x-rx)*angl+(a*src1y-ry)*angl+ry0*;
drcx[]=(a*src2x-rx)*angl+(a*src2y-ry)*angl+rx0*;
drcy[]=-(a*src2x-rx)*angl+(a*src2y-ry)*angl+ry0*;
drcx[]=(a*src3x-rx)*angl+(a*src3y-ry)*angl+rx0*;
drcy[]=-(a*src3x-rx)*angl+(a*src3y-ry)*angl+ry0*;
drcx[]=(a*src4x-rx)*angl+(a*src4y-ry)*angl+rx0*;
drcy[]=-(a*src4x-rx)*angl+(a*src4y-ry)*angl+ry0*;
//获得分块图像大范围
drcx[]=(int)(drcx[]/);//截后10位处理?
drcy[]=(int)(drcy[]/);
drcx[]=(int)(drcx[]/);
drcy[]=(int)(drcy[]/);
drcx[]=(int)(drcx[]/);
drcy[]=(int)(drcy[]/);
drcx[]=(int)(drcx[]/);
drcy[]=(int)(drcy[]/);
//放大二倍有边框,不旋转时+1可处理
int max_x,max_y,min_x,min_y;
int srcx,srcy;
max_x=drcx[];max_y=drcy[];min_x=drcx[];min_y=drcy[];
for (int i=;i<;i++)
{
if (min_x>drcx[i])
min_x=drcx[i];
if (min_y>drcy[i])
min_y=drcy[i];
}
min_x=min_x-;min_y=min_y-;
for (int i=;i<;i++)
{
if (max_x<drcx[i])
max_x=drcx[i];
if (max_y<drcy[i])
max_y=drcy[i];
}
max_x=min_x+-;max_y=max_y+; //将范围内的点映射回原图中 同时旋转插值
for (int j=min_y;j<=max_y;j++)
{
for (int i=min_x;i<=max_x;i++)
{
//将点映射回原图中
srcx=((i-rx0)*angl-(j-ry0)*angl+rx*)/;
srcy=((i-rx0)*angl+(j-ry0)*angl+ry*)/;
if ((srcx>=x-)&&(srcx<=x+)&&(srcy>=y-)&&(srcy<=y+)&&(srcx>=)&&(srcy>=)&&(srcx<=iWidth-)&&(srcy<=iHeight-))/*&&(i>=0)&&(j>=0)*/
{
//映射后位置判断区别可能有误
//if(srcx>x+31)
//{
// srcx=x+31;
//}
//if(srcy>y+31)
//{
// srcy=y+31;
//} //if(srcx<x-1)
//{
// srcx=x-1;
//}
//if(srcy<y-1)
//{
// srcy=y-1;
//} //插值:
//计算整数部分和小数部分
int xOr = floor((double)srcx);
int yOr = floor((double)srcy);
double u=srcx-xOr;
double v=srcy-yOr;
//查表双三插值
int phasex=*u;//8相位
int phasey=*v;
int A1,B1,C1,D1,A2,B2,C2,D2; //计算每个点的插值系数
A1=phase[+phasex];B1=phase[phasex];C1=phase[-phasex];D1=phase[-phasex];
A2=phase[+phasey];B2=phase[phasey];C2=phase[-phasey];D2=phase[-phasey]; //由src计算块编号,使用对应编号块内的相对位置
int xnum,ynum;
int x_upleft,y_upleft;//左上起始点坐标
int x_shift,y_shift; xnum=floor(srcx/32.0)+;
ynum=floor(srcy/32.0)+;
x_upleft=(xnum-)*;
y_upleft=(ynum-)*; int imgsrc[]={};//36*36,32*32
int ijk=; for (int n=;n<;n++)
{
for (int m=;m<;m++)
{
imgsrc[ijk]=pbSrc[(y_upleft+n)*iWidth+x_upleft+m];
ijk++;
} }
//块内相对偏移位置
x_shift= xOr-x_upleft;
y_shift= yOr-y_upleft; int middle=imgsrc[(y_shift)*+(x_shift)]; /*imgsrc[(yOr-1)*iWidth+(xOr-1)]*A1*A2+imgsrc[(yOr)*iWidth+(xOr-1)]*A1*B2+imgsrc[(yOr+1)*iWidth+(xOr-1)]*A1*C2+imgsrc[(yOr+2)*iWidth+(xOr-1)]*A1*D2+
imgsrc[(yOr-1)*iWidth+(xOr)]*B1*A2+imgsrc[(yOr)*iWidth+(xOr)]*B1*B2+imgsrc[(yOr+1)*iWidth+(xOr)]*B1*C2+imgsrc[(yOr+2)*iWidth+(xOr)]*B1*D2+
imgsrc[(yOr-1)*iWidth+(xOr+1)]*C1*A2+imgsrc[(yOr)*iWidth+(xOr+1)]*C1*B2+imgsrc[(yOr+1)*iWidth+(xOr+1)]*C1*C2+imgsrc[(yOr+2)*iWidth+(xOr+1)]*C1*D2+
imgsrc[(yOr-1)*iWidth+(xOr+2)]*D1*A2+imgsrc[(yOr)*iWidth+(xOr+2)]*D1*B2+imgsrc[(yOr+1)*iWidth+(xOr+2)]*D1*C2+imgsrc[(yOr+2)*iWidth+(xOr+2)]*D1*D2;*/ /*int middle=pbSrc[(yOr-1)*iWidth+(xOr-1)]*A1*A2+pbSrc[(yOr)*iWidth+(xOr-1)]*A1*B2+pbSrc[(yOr+1)*iWidth+(xOr-1)]*A1*C2+pbSrc[(yOr+2)*iWidth+(xOr-1)]*A1*D2+
pbSrc[(yOr-1)*iWidth+(xOr)]*B1*A2+pbSrc[(yOr)*iWidth+(xOr)]*B1*B2+pbSrc[(yOr+1)*iWidth+(xOr)]*B1*C2+pbSrc[(yOr+2)*iWidth+(xOr)]*B1*D2+
pbSrc[(yOr-1)*iWidth+(xOr+1)]*C1*A2+pbSrc[(yOr)*iWidth+(xOr+1)]*C1*B2+pbSrc[(yOr+1)*iWidth+(xOr+1)]*C1*C2+pbSrc[(yOr+2)*iWidth+(xOr+1)]*C1*D2+
pbSrc[(yOr-1)*iWidth+(xOr+2)]*D1*A2+pbSrc[(yOr)*iWidth+(xOr+2)]*D1*B2+pbSrc[(yOr+1)*iWidth+(xOr+2)]*D1*C2+pbSrc[(yOr+2)*iWidth+(xOr+2)]*D1*D2;
*/
//middle=middle/(1024*1024); if(middle<=&&middle>=)
pbTag[j*newwidth+i]=middle;
else if(middle>)
pbTag[j*newwidth+i]=;
else
pbTag[j*newwidth+i]=;
}
}
}
}
}
return ERROR_SUCCESS;
}
代码记录——phase16,block32的更多相关文章
- 代码记录——phase16,block36
36*36 -2,-2扩展 代码有问题,有时能运行有时报错. HRESULT RotateZoom(PBYTE pbSrc,int iWidth,int iHeight,double dbRotate ...
- 代码记录——phase16,block36(修正后)
加入边缘判定,<2则加2. if (x_upleft<2) x_upleft=x_upleft+2; if (y_upleft<2) y_upleft=y_upleft+2; HRE ...
- MVVM 代码记录
一.XML <Page x:Class="MVVM.MainPage" xmlns="http://schemas.microsoft.com/winfx/20 ...
- Echarts基于动态数据初步使用 及问题 代码记录.
ECHARTS 插件 基本的动态数据展示(横向图) 下载 echarts.commn.min.js文件 在页面中进行引用, 并为Echarts图形准备一个div盒子 <!-- 引入插件 --&g ...
- OpenCV学习代码记录——人脸检测
很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...
- OpenCV学习代码记录—— Snake轮廓
很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...
- OpenCV学习代码记录——Hough线段检测
很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...
- OpenCV学习代码记录——轮廓(contour)检测
很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...
- OpenCV学习代码记录——canny边缘检测
很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...
随机推荐
- centos 6.4 x86_64 (minimal) 编译安装percona
下载Percona-Server-5.5.24-26.0 wget https://www.percona.com/downloads/Percona-Server-5.5/Percona-Serve ...
- Android—— Animation动画(很详细)
链接: http://www.360doc.com/content/13/0102/22/6541311_257754535.shtml http://www.cnblogs.com/aimeng/a ...
- PowerDesigner使用教程【转】
PowerDesigner使用教程 —— 概念数据模型 一.概念数据模型概述 概念数据模型也称信息模型,它以实体-联系(Entity-RelationShip,简称E-R)理论为基础,并对这 ...
- webbrowser获取无ID无Name控件并模拟点击
常见的获取控件并点击(自动登录): var txtUserID = wbsTask.Document.All["userName"]; var txtPsd = wbsTask.D ...
- Spark编程指南
1.在maven里面添加引用,spark和hdfs的客户端的. groupId = org.apache.spark artifactId = spark-core_2.9.3 version = 0 ...
- MVC教程六:视图的寻址
一.为什么要使用视图 使用视图以后有两个优点: 1.保证页面内容输出和控制器代码的分离.和Code Behind不同,CodeBehind实现的是物理分离,视图可以实现逻辑上的分离. 2.更方便.更直 ...
- poj 1723 中位数
最近在看一些中位数的东西,然后顺便也看了些题目.poj 1723不仅要求到水平位置的最短距离和,还要求水平都相邻的排成一排的最短距离和,即士兵都站成一列. 到y轴的距离好办,按y轴坐标排序,求中位数, ...
- 安卓程序代写 网上程序代写[原]Android项目中string.xml占位符
开发中经常遇到这样的情况 , 在string.xml中用到以下占位符 <string name="delete_success">删除<xliff:g id=&q ...
- [spark] spark 特性、简介、下载
[简介] 官网:http://spark.apache.org/ 推荐学习博客:http://dblab.xmu.edu.cn/blog/spark/ spark是一个采用Scala语言进行开发,更快 ...
- struts2客户端与服务器端即jsp页面与action之间的关系
在Struts2中,客户端和服务器之间的数据传输全部要用到get.set方法:用set方法 ,可以将表单中的值存入Action类.通过Struts2.0标签,调用get方法将Action类中的结果数据 ...