新手请教实例化下面类的对象并在dlg中调用

问题描述

这是一个可以任意角度旋转位图的类,但是不知道如何调用,问题很基础,请各位大虾帮帮忙。刚接触VC++,请多多指教。以下是cpp文件:#include"StdAfx.h"#include"Xz.h"#include"windowsx.h"#include"math.h"#defineRADIAN(angle)((angle)*PI/180.0)//角度到弧度转化的宏#definePI3.1415926535CXz::CXz(void){}CXz::~CXz(void){GlobalFreePtr(m_pBitmapInfo);}voidCXz::Xuanzhuan(doubleRotateAngle){DWORDDstBufSize;LPBYTElpTempPtr,lpPtr,lpSrc,lpTemp;doubleSrcX1,SrcY1,SrcX2,SrcY2;doubleSrcX3,SrcY3,SrcX4,SrcY4;doubleDstX1,DstY1,DstX2,DstY2;doubleDstX3,DstY3,DstX4,DstY4;DWORDx0,y0,x1,y1;doublecosa,sina;doublenum1,num2;//角度到弧度的转化RotateAngle=(double)RADIAN(RotateAngle);cosa=(double)cos((double)RotateAngle);sina=(double)sin((double)RotateAngle);//原图的宽度和高度lpSrc=this->GetData();intWold=this->GetWidth();intHold=this->GetHeight();//原图的四个角的坐标SrcX1=(double)(-0.5*Wold);SrcY1=(double)(0.5*Hold);SrcX2=(double)(0.5*Wold);SrcY2=(double)(0.5*Hold);SrcX3=(double)(-0.5*Wold);SrcY3=(double)(-0.5*Hold);SrcX4=(double)(0.5*Wold);SrcY4=(double)(-0.5*Hold);//新图四个角的坐标DstX1=cosa*SrcX1+sina*SrcY1;DstY1=-sina*SrcX1+cosa*SrcY1;DstX2=cosa*SrcX2+sina*SrcY2;DstY2=-sina*SrcX2+cosa*SrcY2;DstX3=cosa*SrcX3+sina*SrcY3;DstY3=-sina*SrcX3+cosa*SrcY3;DstX4=cosa*SrcX4+sina*SrcY4;DstY4=-sina*SrcX4+cosa*SrcY4;//计算新图的宽度,高度intWnew=(DWORD)(max(fabs(DstX4-DstX1),fabs(DstX3-DstX2))+0.5);intHnew=(DWORD)(max(fabs(DstY4-DstY1),fabs(DstY3-DstY2))+0.5);//计算矩阵(2.9)中的两个常数,这样不用以后每次都计算了num1=(double)(-0.5*Wnew*cosa-0.5*Hnew*sina+0.5*Wold);num2=(double)(0.5*Wnew*sina-0.5*Hnew*cosa+0.5*Hold);if(m_pBitmapInfoHeader->biBitCount<9)//灰度图像{//将新的缓冲区中的每个字节都填成255,这样以后未处理的象素就是白色DstBufSize=Wnew*Hnew;lpTempPtr=newBYTE[Wnew*Hnew];memset(lpTempPtr,(BYTE)255,Wnew*Hnew);lpTemp=lpTempPtr;for(y1=0;y1<Hnew;y1++){for(x1=0;x1<Wnew;x1++){//x0,y0为对应的原图上的坐标x0=(DWORD)(x1*cosa+y1*sina+num1);y0=(DWORD)(-1.0f*x1*sina+y1*cosa+num2);if((x0>=0)&&(x0<Wold)&&(y0>=0)&&(y0<Hold))//在原图范围内{lpPtr=lpSrc+y0*Wold+x0;lpTempPtr=lpTemp+y1*Wnew+x1;*lpTempPtr=*lpPtr;//进行象素的复制lpTempPtr=lpTemp;}}}this->SetWidth(Wnew);this->SetHeight(Hnew);this->m_pData=lpTemp;}else//24位彩色{//将新的缓冲区中的每个字节都填成255,这样以后未处理的象素就是白色DstBufSize=Wnew*Hnew*3;lpTempPtr=newBYTE[Wnew*Hnew*3];memset(lpTempPtr,(BYTE)255,Wnew*Hnew*3);lpTemp=lpTempPtr;for(y1=0;y1<Hnew;y1++){for(x1=0;x1<Wnew;x1++){//x0,y0为对应的原图上的坐标x0=(DWORD)(x1*cosa+y1*sina+num1);y0=(DWORD)(-1.0f*x1*sina+y1*cosa+num2);if((x0>=0)&&(x0<Wold)&&(y0>=0)&&(y0<Hold))//在原图范围内{lpPtr=lpSrc+y0*Wold*3+x0*3;lpTempPtr=lpTemp+y1*Wnew*3+x1*3;*lpTempPtr++=*lpPtr++;//进行象素的复制*lpTempPtr++=*lpPtr++;//进行象素的复制*lpTempPtr=*lpPtr;//进行象素的复制lpTempPtr=lpTemp;}}}this->SetWidth(Wnew);this->SetHeight(Hnew);this->m_pData=lpTemp;}}voidCXz::clearmem2(){LONGtemp;temp=m_pBitmapInfoHeader->biHeight;m_pBitmapInfoHeader->biHeight=m_pBitmapInfoHeader->biWidth;m_pBitmapInfoHeader->biWidth=temp;}UINTCXz::GetWidth(){return(UINT)m_pBitmapInfoHeader->biWidth;}UINTCXz::GetHeight(){return(UINT)m_pBitmapInfoHeader->biHeight;}BYTE*CXz::GetData(){returnm_pData;}BITMAPINFO*CXz::GetInfo(){returnm_pBitmapInfo;}voidCXz::SetWidth(UINTwidth){m_pBitmapInfoHeader->biWidth=width;}voidCXz::SetHeight(UINTheight){m_pBitmapInfoHeader->biHeight=height;}

解决方案

解决方案二:
帮顶吧。vc不懂

时间: 2024-09-29 23:21:57

新手请教实例化下面类的对象并在dlg中调用的相关文章

编程-java中在类定义里能实例化本类的对象吗?

问题描述 java中在类定义里能实例化本类的对象吗? 我在一本书上看到这个,这里的内容试讲java的构造方法私有化的 class Singleton { Singleton instance=new Singleton(); private Singleton() {} public void print() { System.out.println("Hello World"); } } 这个我想请教一下,为什么这里能在类定义里实例化本类的对象? 这里还列出了另一种方式: class

php基础知识:类与对象(5) static_php技巧

Declaring class members or methods as static makes them accessible without needing an instantiation of the class. A member declared as static can not be accessed with an instantiated class object (though a static method can).  声明静态的类变量和方法可以不需要实例化类对象的

mvc-MVC发布类无法加载,MVC新手请教!

问题描述 MVC发布类无法加载,MVC新手请教! 网站发布后提示类无法加载 解决方案 IIS是否选择.net framework4.0. 解决方案二: 检查两个,一个是你如果后安装的iis,需要注册下asp.net 运行 Aspnet_iisreg.exe 具体用法google下 还有就是你的程序的程序池的.net版本,如guwei说的那样,是不是设置的2.0

css-CSS伪类的问题--新手请教

问题描述 CSS伪类的问题--新手请教 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>test</title> <style type='text/css'> a:link{ color: red; } a:visited{ color: green; } a:hover{ border:

C#简介- 类和对象,选自《C#编程语言详解》,送给新手

编程|对象|详解 类(class)是C#类型中最基础的类型.类是一个数据结构,将状态(字段)和行为(方法和其他函数成员)组合在一个单元中.类提供了用于动态创建类实例的定义,也就是对象(object).类支持继承(inheritance)和多态(polymorphism),即派生类能够扩展和特殊化基类的机制. 使用类声明可以创建新的类.类声明以一个声明头开始,其组成方式如下:先是指定类的特性和修饰符,后跟类的名字,基类(如果有的话)的名字,以及被该类实现的接口名.声明头后面就是类体了,它由一组包含

设计一个只能在堆上或栈上实例化的类

一道C++笔试题:设计一个只能在堆内存上实例化的类和一个只能在栈内存上实例化的类 只能在堆内存上实例化的类:将析构函数定义为private,在栈上不能自动调用析构函数,只能手动调用.也可以将构造函数定义为private,但这样需要手动写一个函数实现对象的构造. 只能在栈内存上实例化的类:将函数operator new和operator delete定义为private,这样使用new操作符创建对象时候,无法调用operator new,delete销毁对象也无法调用operator delete

PHP面向对象编程详解:类和对象

PHP面向对象编程详解:类和对象 从OOP的视角看,不应区分语言.无论是C++.无论是Java.无论是.net还有更多面向对象的语言,只要你了解了OO的真谛,便可以跨越语言,让你的思想轻松的跳跃.便没有对于Java..net.PHP 之间谁强谁弱的争执了. 希望这个介绍PHP5面向对象编程(OOP)的资料能让初学者受益,能让更多的PHPer开始转向OO的编程过程. 相对PHP4,PHP5在面向对象方面改变了很多.我们将只介绍PHP5环境下的面向对象.而我们必须改变自己来跟随PHP5的发展.如果代

C#体验编程技术 类与对象

编程|对象 组件编程不是对传统面向对象的抛弃,相反组件编程正是面向对象编程的深化和发展.类作为面向对象的灵魂在C#语言里有着相当广泛深入的应用,很多非常"Sharp"的组件特性甚至都是直接由类包装而成.对类的深度掌握自然是我们"Sharp XP"重要的一环. 类 C#的类是一种对包括数据成员,函数成员和嵌套类型进行封装的数据结构.其中数据成员可以是常量,域.函数成员可以是方法,属性,索引器,事件,操作符,实例构建器,静态构建器,析构器.我们将在"第五讲 构

初学Java入门--类与对象

初学|对象 4.2 类与对象 4.2.1 类 在面向对象的语言中,类是个很重要的概念.面向对象的方法把所有的处理对象进行归类.具有相同性质的对象归为一类.例如学校里有很多学生,每个学生都是一个对象,而"学生"则是一个类,它包含了所有在学校学习的人. 在Java语言里,对象是一组描述对象的属性和操作方法的集合,其中属性表明对象的状态,方法表明对象的行为.类是对象的定义.一个对象具有哪些属性和方法,由类来决定.从编程角度看,类是一种复合数据类型,它封装了一组变量和方法(函数). 声明一个类