c语言怎么对图像涂平移,c语言实现图像的旋转与平移.doc

实验二图象的几何变换参考资料

1平移

平移(translation)变换是几何变换中最简单的一种。初始坐标为(x ,y )的点经过平移(t ,t )(以向

0

0

x y

右,向下为正方向)后,坐标变为(x ,y )。这两点之间的关系是 x =x +t,y =y +t。

1

1

1

0

x

1

0

y

下面给出 Translation的源代码。算法的思想是先将所有区域填成白色,然后找平移后显示

区域的左上角点(x ,y )和右下角点(x ,y ),分几种情况进行处理。

0

0

1

1

先看 x方向(width指图象的宽度)

(1)

(2)

tx≤-width:很显然,图象完全移出了屏幕,不用做任何处理;

-width

(3) 0< t

x x x

(4)

tx≥width:图象完全移出了屏幕,不用做任何处理。

y方向是对应的(height表示图象的高度):

(1)

(2)

(3)

(4)

ty≤-height,图象完全移出了屏幕,不用做任何处理;

-height

y

y

y

0

y

y

y

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

这种做法利用了位图存储的连续性,即同一行的象素在内存中是相邻的。利用 memcpy函数,

从(x ,y )点开始,一次可以拷贝一整行(宽度为 x-x ),然后将内存指针移到(x ,y +1)处,拷

0

0

1

0

0

0

贝下一行。这样拷贝(y -y )行就完成了全部操作,避免了一个一个象素的计算,提高了效率。

1

0

Translation的源代码如下:

int

xOffset=0,yOffset=0;

BOOL Translation(HWND hWnd)

{

DLGPROC

dlgInputBox = NULL;

OffBits,BufSize;

lpImgData;

DWORD

LPBITMAPINFOHEADER

LPSTR

lpPtr;

HLOCAL

hTempImgData;

lpTempImgData;

lpTempPtr;

LPBITMAPINFOHEADER

LPSTR

int

SrcX0,SrcY0,SrcX1,SrcY1;

DstX0,DstY0,DstX1,DstY1;

RectWidth,RectHeight;

xVisible,yVisible;

hDc;

int

int

BOOL

HDC

HFILE

int

hf;

i;

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

dlgInputBox = (DLGPROC) MakeProcInstance ( (FARPROC)InputBox,ghInst );

DialogBox (ghInst, "INPUTBOX", hWnd, dlgInputBox);

FreeProcInstance ( (FARPROC) dlgInputBox );

//OffBits为 BITMAPINFOHEADER结构长度加调色板的大小

OffBits=bf.bfOffBits-sizeof(BITMAPFILEHEADER);

BufSize=OffBits+bi.biHeight*LineBytes;//要开的缓冲区的大小

//为新产生的位图分配缓冲区内存

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

{

MessageBox(hWnd,"Error alloc memory!","Error Message",MB_OK|

MB_ICONEXCLAMATION);

return FAL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值