C++(MFC)金刚石图案的绘制平移缩放

合集下载

绘制金刚石实验报告

绘制金刚石实验报告

附页实验内容、方法和步骤(1)新建一个MFC工程test(2)编写金刚石绘制函数(3)运行调试及结果截图:源代码:#include "stdafx.h"#include "test.h"#include "testDoc.h"#include "testView.h"#include <math.h>#define PI 3.1415926#define ROUND(a) int(a+0.5)#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif// CTestViewIMPLEMENT_DYNCREATE(CTestView, CView)BEGIN_MESSAGE_MAP(CTestView, CView)ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) END_MESSAGE_MAP()// CTestView construction/destructionCTestView::CTestView(){}CTestView::~CTestView(){}BOOL CTestView::PreCreateWindow(CREATESTRUCT& cs)return CView::PreCreateWindow(cs);}// CTestView drawingvoid CTestView::OnDraw(CDC* pDC){CTestDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);CRect rect;GetClientRect(&rect);pDC->SetMapMode(MM_ANISOTROPIC);pDC->SetWindowExt(rect.Width(),rect.Height());pDC->SetViewportExt(rect.Width(),-rect.Height());pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2);CPen NewPen,*pOldPen;NewPen.CreatePen(PS_SOLID,1,RGB(0,0,255));pOldPen=pDC->SelectObject(&NewPen);double thta;int n=20,r=150;CPoint p[20];thta=2*PI/n;for(int i=0;i<n;i++){p[i].x=(long)(r*cos(i*thta));p[i].y=(long)(r*sin(i*thta));}for(i=0;i<=n-2;i++){for(int j=i+1;j<=n-1;j++){pDC->MoveTo(ROUND(p[i].x),ROUND(p[i].y));pDC->LineTo(ROUND(p[j].x),ROUND(p[j].y));}}pDC->SelectObject(pOldPen);NewPen.DeleteObject();ReleaseDC(pDC);}// CTestView printingBOOL CTestView::OnPreparePrinting(CPrintInfo* pInfo){// default preparationreturn DoPreparePrinting(pInfo);}void CTestView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) {void CTestView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){}// CTestView diagnostics#ifdef _DEBUGvoid CTestView::AssertValid() const{CView::AssertValid();}void CTestView::Dump(CDumpContext& dc) const{CView::Dump(dc);}CTestDoc* CTestView::GetDocument() // non-debug version is inline{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTestDoc)));return (CTestDoc*)m_pDocument;}#endif //_DEBUG// CTestView message handlers。

编程实现一幅图像的平移、镜像、旋转、缩小和放大。

编程实现一幅图像的平移、镜像、旋转、缩小和放大。

课程设计任务书学生姓名: zhh 专业班级: 通信1002班指导教师:徐文君工作单位:信息工程学院题目: 通信工程应用技术综合训练与实习初始条件:1。

数字图像处理课程相关知识。

2。

Matlab软件的软件编程应用与仿真.要求完成的主要任务:任务:编程实现一幅图像的平移、镜像、旋转、缩小和放大.要求:1。

给出所用算法的理论依据和必要的推导过程。

2.给出原始图像和处理后的图像。

时间安排:指导教师签名:年月日系主任签名:年月日目录摘要............................................................................ Abstract (I)1 图像的几何变换 01.1图像几何变换内容 01.2 Matlab仿真使用的主要函数 02图像的平移变换 (3)2。

1图像平移变换原理 (3)2.2图像平移变换的matlab实现 (4)3图像的镜像变换 (5)3.1 图像镜像变换原理 (6)3。

2 图像镜像变换的matlab实现 (7)4图像的旋转变换 (8)4。

1图像旋转变换原理 (9)4。

2 图像旋转变换的matlab实现 (10)5图像的比例变换................................................. 错误!未定义书签。

5.1 图像比例变换原理 (13)5。

2 图像比例变换的matlab实现 (13)6 心得体会 (17)参考文献 (18)附录 (19)摘要图像是对三维实际景物的平面投影,图形图像处理主要是通过计算机对图像进行处理,从而达到预期的效果的技术.为了观测需要,常常需要进行各种不同的几何变换,主要包括图像的平移变换,图像水平、垂直镜像变换,图像旋转变换,图像比例变换。

实际上,几何变换不改变像素值,而是改变像素所在的位置。

在图像处理中,可以通过Matlab来实现图像的几何变换,此软件的语法结构简单,并且具有极强的数值计算、图形文字处理、数据分析、图形绘制及图像处理等功能。

图像的几何变换的两种实现(旋转、平移、放大、缩小)

图像的几何变换的两种实现(旋转、平移、放大、缩小)

面向对象程序设计学号:2学生所在学院:信息工程学院学生姓名:邵丽群任课教师:熊邦书教师所在学院:信息工程学院2013级实现图像的几何变换电子信息工程信息工程学院摘要:几何变换是最常见的图像处理手段,通过对变形的图像进行几何校正,可以得出准确的图像。

常用的几何变换功能包括图像的平移、图像的镜像变换、图像的转置、图像的缩放、图像的旋转等等。

目前数字图像处理的应用越来越广泛,已经渗透到工业、航空航天、军事等各个领域,在国民经济中发挥越来越大的作用。

作为数字图像处理的一个重要部分,本文接受的工作是如何Visual C++编程工具设计一个完整的应用程序,实现经典的图像几何变换功能。

程序大概分为两大部分:读写BMP图像,和数字图像的几何变换。

即首先用Visual C++创建一个单文档应用程序框架,在实现任意BMP图像的读写,打印,以及剪贴板操作的基础上,完成经典的图像几何变换功能。

图像几何变换的Visual C++编程实现,为校内课题的实现提供了一个实例。

关键字:图像处理;几何变换(图像的平移、缩放、转置、旋转和镜像变换);BMP图像;Visual C++一、引言图像几何变换是指用数学建模的方法来描述图像位置、大小、形状等变化的方法。

在实际场景拍摄到的一幅图像,如果画面过大或过小,都需要进行缩小或放大。

如果拍摄时景物与摄像头不成相互平行关系的时候,会发生一些几何畸变,例如会把一个正方形拍摄成一个梯形等。

这就需要进行一定的畸变校正。

在进行目标物的匹配时,需要对图像进行旋转、平移等处理。

在进行三维景物显示时,需要进行三维到二维平面的投影建模。

因此,图像几何变换是图像处理及分析的基础。

图像几何变换是计算机图像处理领域中的一个重要组成部分,也是值得深讨的一个重要课题。

在图像几何变换中主要包括图像的放缩、图像的旋转、图像的移动、图像的镜像、图像的块操作等内容,几何变换不改变图像的像素值,只改变像素所在的几何位置。

从广义上说,图像是自然界景物的客观反映,是人类认识世界和人类本身的重要源泉。

C++(MFC)金刚石图案的绘制平移缩放

C++(MFC)金刚石图案的绘制平移缩放
pDC->SetViewportOrg(Rect.right/2,Rect.bottom/2);/////////////////////////
//CBrush d(RGB(0,255,0));////////设置填充颜色
//pDC->SelectObject(d);/////////////////////
CView::OnRButtonDown(nFlags, point);
}
void CAaaaaView::On1()//缩放菜单
{
// TODO: Add your command handler code here
a=true;
}
void CAaaaaView::On2()//平移菜单
{
// TODO: Add your command handler code here
CPoint b=point;
pCurrentDC->DPtoLP(&b);
x0=x0-b.x;
y0=y0-b.y;
}
Invalidate();
CView::OnLButtonDown(nFlags, point);
}
int CAaaaaView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
pCurrentDC= new CClientDC(this);
return 0;
}
void CAaaaaView::OnRButtonDown(UINT nFlags, CPoint point)//缩放下的右击缩小

C#翻转、缩放和平移图形

C#翻转、缩放和平移图形

C#翻转、缩放和平移图形
C# 翻转、缩放和平移图形
为了翻转、缩放和移动图形,这里我们使用了坐标变换中的旋转变换、比例变换和平移变换。

这几种变换的方法分别是RotateTransform()、ScaleTransform()和TranslateTransform()。

下面就使用这几种变换来对绘制的图形进行翻转、缩放和移动,具体过程如下所示:
(1)在Visual Studio 2010中,创建名为osGraphic的Windows应用程序,并设置其存放路径。

然后,在VS界面中,设置Form的Text属性为“翻转、缩放和移动图形”。

(2)双击空白窗体,在打开代码编辑窗口编写该窗体的Paint事件代码,该代码使用DrawEllipse()方绘制一个椭圆。

具体如下所示:
轴”和“Y轴”;添加两个TextBox控件,设置其Text属性为空,Name属性为textBox1和textBox2;添加一个Button控件,设置其Text属性为“缩放图形”。

(4)双击【缩放图形】按钮,在打开代码编辑窗口编写该按钮的单击事件代码,该代码通过使用比例变换ScaleTransform()方法,并根据用户给定的缩放比例值。

mfc空间几何变换之图像平移、镜像、旋转、缩放详解

mfc空间几何变换之图像平移、镜像、旋转、缩放详解

MFC空间几何变换之图像平移、镜像、旋转、缩放详解一. 图像平移前一篇文章讲述了图像点运算(基于像素的图像变换),这篇文章讲述的是图像几何变换:在不改变图像容的情况下对图像像素进行空间几何变换的处理方式。

点运算对单幅图像做处理,不改变像素的空间位置;代数运算对多幅图像做处理,也不改变像素的空间位置;几何运算对单幅图像做处理,改变像素的空间位置,几何运算包括两个独立的算法:空间变换算法和灰度级插值算法。

空间变换操作包括简单空间变换、多项式卷绕和几何校正、控制栅格插值和图像卷绕,这里主要讲述简单的空间变换,如图像平移、镜像、缩放和旋转。

主要是通过线性代数中的齐次坐标变换。

图像平移坐标变换如下:运行效果如下图所示,其中BMP图片(0,0)像素点为左下角。

其代码核心算法:1.在对话框中输入平移坐标(x,y) m_xPY=x,m_yPY=y2.定义Place=dlg.m_yPY*m_nWidth*3 表示当前m_yPY行需要填充为黑色3.新建一个像素矩阵ImageSize=new unsigned char[m_nImage]4.循环整个像素矩阵处理for(int i=0 ; i<m_nImage ; i++ ){if(i<Place) {ImageSize[i]=black;continue;}//黑色填充底部从小往上绘图else if(i>=Place && countWidth<dlg.m_xPY*3) {//黑色填充左部分ImageSize[i]=black;countWidth++; continue;}else if(i>=Place && countWidth>=dlg.m_xPY*3) {//图像像素平移区域ImageSize[i]=m_pImage[m_pImagePlace];//原(0,0)像素赋值过去m_pImagePlace++;countWidth++;if(countWidth==m_nWidth*3) {//一行填满m_pImagePlace走到(0,1)number++;m_pImagePlace=number*m_nWidth*3;}}}5.写文件绘图fwrite(ImageSize,m_nImage,1,fpw)第一步:在ResourceView资源视图中,添加Menu子菜单如下:(注意ID号)第二步:设置平移对话框。

mfc的二位坐标系缩放

mfc的二位坐标系缩放

mfc的二位坐标系缩放MFC(Microsoft Foundation Class)是Microsoft提供的开发框架,用于开发Windows平台上的应用程序。

二维坐标系缩放是指在二维平面上对坐标进行放大或缩小的操作,可以用来实现图形的缩放、平移等功能。

在MFC中,可以通过一些函数和方法来实现二维坐标系的缩放。

下面我们将详细介绍如何在MFC中实现二维坐标系的缩放功能。

首先,在MFC框架中,可以通过重写绘图框架(如CView类)的OnDraw函数来进行绘图操作。

在OnDraw函数中,可以使用CDC (Device Context)类来进行绘图操作。

对于二维坐标系的缩放,我们可以通过修改绘图操作时的坐标系来实现。

具体的步骤如下:1.获取绘图设备的宽度和高度。

可以使用CDC类的GetWindowExt 函数来获取绘图设备的宽度和高度。

int width, height;CDC* pDC = GetDC();width = pDC->GetWindowExt().cx;height = pDC->GetWindowExt().cy;2.设置缩放比例。

我们可以通过修改绘图操作时坐标系的缩放比例来实现缩放功能。

缩放比例可以是一个浮点数,表示放大或缩小的倍数。

float scaleX, scaleY;scaleX = 2.0; // x轴放大两倍scaleY = 1.5; // y轴放大1.5倍3.缩放绘图设备的坐标系。

可以使用CDC类的ScaleViewportExt 函数来缩放绘图设备的坐标系。

pDC->ScaleViewportExt(scaleX, scaleY, scaleX, scaleY);这个函数的四个参数分别表示x轴的缩放比例、y轴的缩放比例、x轴的原点位置和y轴的原点位置。

在这里,我们将原点位置也按照相同比例进行缩放。

4.根据缩放后的坐标系进行绘图。

在进行绘图操作时,坐标的位置也需要进行相应的缩放操作。

VC编程实时缩放及平移

VC编程实时缩放及平移

VC编程实时缩放及平移
乔建魁
【期刊名称】《电脑编程技巧与维护》
【年(卷),期】2005(000)010
【摘要】Windows图形程序中,图形无级缩放及平移是一项非常重要的功能,实现Windows应用程序的图形无级缩放及平移,如果采用一般的GDI绘制方法,在每次显示比例或视点变化之后简单擦除屏幕重画,将导致显示窗口的闪烁,影响显示效果。

本文将介绍另外一种实现方法,解决屏幕擦除重画问题,从而解决无级缩放平移引起的闪烁,真正实现实时缩放及平移功能。

【总页数】3页(P39-41)
【作者】乔建魁
【作者单位】无
【正文语种】中文
【中图分类】TP3
【相关文献】
1.坐标平移、旋转和缩放指令在数控铣削中的运用 [J], 龙育才
2.比较在时间缩放和俯仰平移算法中海明窗函数和布菜克曼窗函数的效果 [J], 林志伟;达力;王浩;韩炜;林凡
3.基于不变矩的抗旋转、缩放、平移鲁棒性数字水印 [J], 何冰;王晅;赵杰
4.一个抗旋转、缩放、平移攻击的图像水印算法 [J], 左国存;李陶深;兰红星
5.基于最大熵估计Alpha谱缩放与平移量的温度与发射率分离算法 [J], 刘俊池;李洪文;王建立;刘欣悦;马鑫雪
因版权原因,仅展示原文概要,查看原文内容请购买。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//CBrush d(RGB(0,255,0));////////设置填充颜色
//pDC->SelectObject(d);/////////////////////
pDC->Ellipse(-200,200,200,-200);
int a[30][2];//////////x坐标为a[i][0];y坐标为a[i][1];
{
// TODO: Add your command handler code here
a=true;
}
void CAaaaaView::On2()//平移菜单
{
// TODO: Add your command handler code here
a=false;
}
实验体会:
本次实验让我懂得如何去平移一个物体,也让我懂得如何缩放物体。
draw(pCurrentDC);
}
/////////////////////////////////////////////////////////////////////////////
// CAaaaaView printing
void CAaaaaView::draw(CDC *pDC)
{
CRect Rect;////////////////////////////////////////////////////////////////
GetClientRect(& Rect);/////////////////////////////////////////////////////
pDC->SetMapMode(MM_ISOTROPIC);//////////////////////设置映射模式/////////
pDC->SetWindowExt(Xw,Yw);///////////////////////////
//for(int l=0;l<30;l++){
//d<<a[l][0]<<" "<<a[l][1]<<endl;
//}
//d.close();
for(int j=0;j<30;j++)
for(int k=0;k<30;k++){
pDC->MoveTo(a[j][0],a[j][1]);
pDC->LineTo(a[k][0],a[k][1]);
Yw=Yw/2;
CPoint p=point;
pCurrentDC->DPtoLP(&p);
x0=Xw/4+p.x;
y0=Yw/4+p.y;
}
else{
CPoint b=point;
pCurrentDC->DPtoLP(&b);
x0=x0-b.x;
y0=y0-b.y;
}
Invalidate();
CView::OnLButtonDown(nFlags, point);
pDC->SetWindowOrg(x0,y0);
pDC->SetViewportExt(Rect.right,-Rect.bottom);/////////////////////////////
pDC->SetViewportOrg(Rect.right/2,Rect.bottom/2);/////////////////////////
实验二
实验目的:
绘制金刚石图案,并利用鼠标交互实现平移、放大和缩小
实验过程:
设置映射模式为MM_ISOTROPIC,通过在MouseDown、MouseUp及MouseMove消息处理中改变逻辑坐标的原点及范围实现图形的平移及放大和缩小
实验主要算法:
CAaaaaView::CAaaaaView()//构造函数
}
int CAaaaaView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
if(a)
{
XwHale Waihona Puke Xw*2;Yw=Yw*2;
CPoint p=point;
pCurrentDC->DPtoLP(&p);
x0=p.x+Xw/4;
y0=p.y+Yw/4;
Invalidate();}
CView::OnRButtonDown(nFlags, point);
}
void CAaaaaView::On1()//缩放菜单
}
}
void CAaaaaView::OnLButtonDown(UINT nFlags, CPoint point)//缩放下左击放大,平移下平移
{
// TODO: Add your message handler code here and/or call default
if(a)
{
Xw=Xw/2;
{
// TOD: add construction code here
Xw=1000;
Yw=1000;
x0=y0=0;
}
void CAaaaaView::OnDraw(CDC* pDC)
{
CAaaaaDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pCurrentDC= new CClientDC(this);
return 0;
}
void CAaaaaView::OnRButtonDown(UINT nFlags, CPoint point)//缩放下的右击缩小
{
// TODO: Add your message handler code here and/or call default
int r=200;
double c=3.141592653;
for(int i=0;i<=29;i++){
a[i][0]=r* cos(2*c/30*i);
a[i][1]=r* sin(2*c/30*i);
}
//ofstream d("checkpoint.txt",ios::trunc);//写入记事本,检验是否正确创建各个点
相关文档
最新文档