y

y

y

(4) ty≥height,图象完全移出了屏幕,不用做任何处理。

这种做法利用了位图存储的连续性,即同一行的象素在内存中是相邻的。利用 memcpy函数, 从(x ,y )-x )处,拷 0 0 点开始,一次可以拷贝一整行(宽度为 x1 0 ,然后将内存指针移到(x ,y +1)0 0 贝下一行。这样拷贝(y -y )1 0 行就完成了全部操作,避免了一个一个象素的计算,提高了效率。 Translation的源代码如下: int xOffset=0,yOffset=0; BOOL Translation(HWND hWnd) {

DLGPROC DWORD

dlgInputBox = NULL; OffBits,BufSize;

LPBITMAPINFOHEADER lpImgData; LPSTR HLOCAL

lpPtr;

hTempImgData;

LPBITMAPINFOHEADER lpTempImgData; LPSTR int int int BOOL HDC HFILE int

lpTempPtr;

SrcX0,SrcY0,SrcX1,SrcY1; DstX0,DstY0,DstX1,DstY1; RectWidth,RectHeight; xVisible,yVisible; hDc; hf; i;

//出现对话框,输入 x偏移量 xOffset,和 y偏移量 yOffset

dlgInputBox = (DLGPROC) MakeProcInstance ( (FARPROC)InputBox,ghInst ); DialogBox (ghInst, \FreeProcInstance ( (FARPROC) dlgInputBox );

//OffBits为 BITMAPINFOHEADER结构长度加调色板的大小 OffBits=bf.bfOffBits-sizeof(BITMAPFILEHEADER);

BufSize=OffBits+bi.biHeight*LineBytes;//要开的缓冲区的大小 //为新产生的位图分配缓冲区内存

if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL) {

MessageBox(hWnd,\MB_ICONEXCLAMATION); return FALSE; //失败,返回 }

//lpImgData为指向原来位图数据的指针

lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData); //lpTempImgData为指向新产生位图数据的指针

lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData); lpPtr=(char *)lpImgData;

lpTempPtr=(char *)lpTempImgData;

//将新的缓冲区中的每个字节都填成 255,这样以后未处理的象素就是白色 memset(lpTempPtr,(BYTE)255,BufSize);

//两幅图之间的头信息,包括调色板都是相同的,所以直接拷贝头和调色板 memcpy(lpTempPtr,lpPtr,OffBits);

//xVisible为 FALSE时,表示 x方向已经移出了可显示的范围 xVisible=TRUE; if( xOffset<= -bi.biWidth ) xVisible=FALSE; else if( xOffset<=0){

DstX0=0; //表示移动后,有图区域的左上角点的 x坐标

DstX1=bi.biWidth+xOffset; //表示移动后,有图区域的右下角点的 x坐标 }

else if ( xOffsetxVisible=FALSE;

SrcX0=DstX0-xOffset; //对应 DstX0在原图中的 x坐标 SrcX1=DstX1-xOffset; //对应 DstX1在原图中的 x坐标 RectWidth=DstX1-DstX0; //有图区域的宽度

//yVisible为 FALSE时,表示 y方向已经移出了可显示的范围 yVisible=TRUE;

if( yOffset<= -bi.biHeight ) yVisible=FALSE; else if( yOffset<=0){

DstY0=0; //表示移动后,有图区域的左上角点的 y坐标

DstY1=bi.biHeight+yOffset; //表示移动后,有图区域的右下角点的 y坐标 }

else if ( yOffset} else

yVisible=FALSE;

SrcY0=DstY0-yOffset; //对应 DstY0在原图中的 y坐标 SrcY1=DstY1-yOffset; //对应 DstY1在原图中的 y坐标 RectHeight=DstY1-DstY0; //有图区域的高度

if( xVisible && yVisible){ //x,y方向都没有完全移出可显示的范围 for(i=0;i//lpPtr指向要拷贝的那一行的最左边的象素对应在原图中的位 //置。特别要注意的是,由于.bmp是上下颠倒的,偏移是 //(BufSize-LineBytes-(i+SrcY0)*LineBytes)+SrcX0,而不是 //(i+SrcY0)*LineBytes)+SrcX0,你试着举个例子就明白了。 lpPtr=(char*)lpImgData+(BufSize-LineBytes- (i+SrcY0)*LineBytes)+SrcX0;

//lpTempPtr指向要拷贝的那一行的最左边的象素对应在新图中//的位置。同样要注意上面// 的问题。

lpTempPtr=(char*)lpTempImgData+

(BufSize-LineBytes-(i+DstY0)*LineBytes)+DstX0; //拷贝一行(宽度为 RectWidth)

memcpy(lpTempPtr,lpPtr,RectWidth);

} }

以上是由77cn范文大全为大家整理的c语言实现图像的旋转与平移的相关范文,本文关键词为语言,实现,图像,旋转,平移,实验,图象,几何,变换,参考资,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在教育文库中查看更多范文。

c语言实现图像的旋转与平移.doc

免费范文网为全国范文类知名网站,下载全文稍作修改便可使用,即刻完成写稿任务。

已有11人下载

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库c语言实现图像的旋转与平移在线全文阅读。

本文来自:免费范文网(www.77cn.com.cn) 转载请注明出处!

c语言中实现自动平移,c语言实现图像的旋转与平移相关推荐

  1. verilog语言中的@什么意思 verilog语言中的@什么意思

    verilog语言中的@什么意思 verilog语言中的@什么意思 2012-05-27 22:47 在英语中@ 读at,也就是在--的时候,这个小学应该学过,对吧.verilog中@ 的含义就是触发 ...

  2. c加加属于面向对象的程序设计语言吗,下列语言中属于面向对象的程序设计语言是______。A、Visual BasicB、PASCALC、CD、FORTRAN...

    下列语言中属于面向对象的程序设计语言是______.A.Visual BasicB.PASCALC.CD.FORTRAN 更多相关问题 经纬仪如存在指标差,将使观测结果出现( ). 德治的约束作用主要 ...

  3. C语言多case自动跳出,C语言switch中case后跟随break语句

    1.case后面的常量表达式实际上只起语句标号作用,而不起条件判断作用,即"只是开始执行处的入口标号". 因此,一旦与switch后面圆括号中表达式的值匹配,就从此标号处开始执行: ...

  4. 语言中拟合函数 计算aic_Go语言函数深度解析(中)

    上回函数深度解析给大家聊了一些函数的基本知识,不知道还有没有人记得,不记得赶紧回去复习! 他们是 go语言中函数的基本原理 单/多个同/不同类型参数 单/多个同/不同类型返回值 值传递,引用传递 函数 ...

  5. c语言中*用于指针,关于C语言中指针的理解

    关于c语言中指针的一些理解 这几天在看任哲老师编写的嵌入式实时操作系统uC/OS原理与应用一书,第二章讲到指针的用法,我发现自己有些地方有疑问,就重新看了关于c指针的知识.同时也对指针有了一定的理解. ...

  6. c语言中变量的大小,C语言变量定义

    C语言变量定义 程序设计就是让计算机按照一定的指令来进行工作,可以说数据的处理是程序设计的主要任务.那么数据是怎么加入到计算机的内存中呢?下面是小编分享的C语言变量定义,欢迎大家阅读!更多相关信息请关 ...

  7. 将123倒转 c语言,中国航信杯C语言程序设计答案解析版.doc

    中国航信杯C语言程序设计答案解析版 2 - 1 - 25 - (比赛科目:C语言程序设计) 软件要求与硬件要求 软件要求 WinTC(版本:V1.9.1) Dev C++(版本:4.9) Visual ...

  8. c语言中关键字的含义,c语言中的关键字有哪些?有什么含义?

    c语言中的关键字有哪些?有什么含义? 发布时间:2020-04-23 09:33:30 来源:亿速云 阅读:174 作者:小新 这篇文章主要介绍了c语言中的关键字有哪些?有什么含义?,具有一定借鉴价值 ...

  9. c语言中接收字符串函数,C语言中字符串处理函数拾锦

    之前在学习C语言的时候,知道C语言库函数中有很多字符串处理函数,但是没怎么好好利用它.最近,发现它们的作用实在太大了,而且有些是我从来都没有用过的.今天想整理一下,方便以后使用.比较容易理解的,就没有 ...

最新文章

  1. Git clone密码输入错误如何修改
  2. 前端调用mysql异步_PHP 使用 Swoole – TaskWorker 实现异步操作 Mysql
  3. kafka partition分配_kafka的分区分配策略
  4. neo4j安装_基于Neo4j的知乎关系爬虫
  5. Java jdbc中的date,大文本等类型转换
  6. python中循环结构关键字_Python的循环结构,也简单!
  7. AC日记——凌乱的yyy 洛谷 P1803
  8. CMake和Make——简介和对比
  9. 【C/C++】友元函数和友元类
  10. japid-conf目录文件配置
  11. socket 和 SocketServer 模块
  12. 专业的统计分析软件 IBM SPSS Statistics 26.0.2 Mac版(内附安装包网盘链接)
  13. Bolt界面引擎元对象(UIObject)的动态创建
  14. Excel VBA生成SQL建表语句
  15. 你摸透英语的16种时态了嘛
  16. QualDash: Adaptable Generation of Visualisation Dashboards for Healthcare Quality Improvement
  17. 小黄鸡 php,Simsimi (小黄鸡) API接口(PHP)公布,小黄鸡API接口非官方PHP版本来啦...
  18. AM335x 如何修改phy及双网络使用说明(精华!!!)
  19. OpenStack挂载ISO,安装原版windows
  20. 绘图软件origin使用总结

热门文章

  1. goland 方法注释_goland 设置注释模板的过程图文详解
  2. python使用shell命令_python 调用shell命令的方法
  3. ios请求头解决参数中文乱码_花了一天时间就解决了一个的请求头传参参数格式bug...
  4. python getattr和getattribute_详解Python中 __get__和__getattr__和__getattribute__的区别
  5. programing python_Programing in Python3(Second Edition)_实例
  6. 安卓逆向_16 --- ARM 静态分析( 使用 IDA Pro 分析 ARM 汇编【java_ 和 JNI_OnLoad】 )
  7. VS2019 更新MSDN并创建快捷方式
  8. python range 步长为负数_Python入门第7课,循环结构学习,for语句range函数的3种用法...
  9. C++学习之路 | PTA乙级—— 1073 多选题常见计分法 (20 分)(精简)
  10. C++学习之路 | PTA乙级—— 1022 D进制的A+B (20分)(精简)