C++Builder图片旋转问题
图片是从数据库里面取的,画在PaintBox控件上,想在绘图之前加一个图片旋转角度,画出来的是旋转之后的图片。
这样子太慢了,有其他好的方法吗
TPaintBox *Image2 = new TPaintBox(this);
Image2->Parent=this;
Image2->Enabled=false;
if(angle>180)angle=360-angle;
if(angle<-180)angle=360+angle;
float radians=(2*3.1416*angle)/360;
float cosine=(float)cos(radians);
float sine=(float)sin(radians);
float Point1x=(-Image1->Height*sine);
float Point1y=(Image1->Height*cosine);
float Point2x=(Image1->Width*cosine-Image1->Height*sine);
float Point2y=(Image1->Height*cosine+Image1->Width*sine);
float Point3x=(Image1->Width*cosine);
float Point3y=(Image1->Width*sine);
float minx=min(0,min(Point1x,min(Point2x,Point3x)));
float miny=min(0,min(Point1y,min(Point2y,Point3y)));
float maxx=max(Point1x,max(Point2x,Point3x));
float maxy=max(Point1y,max(Point2y,Point3y));
int DestBitmapWidth,DestBitmapHeight;
if(angle>90&&angle<180)
DestBitmapWidth=(int)ceil(-minx);
else
DestBitmapWidth=(int)ceil(maxx-minx);
if(angle>-180&&angle<-90)
DestBitmapHeight=(int)ceil(-miny);
else
DestBitmapHeight=(int)ceil(maxy-miny);
Image2->Height=DestBitmapHeight;
Image2->Width=DestBitmapWidth;
for(int x=0;x<DestBitmapWidth;x++)
{
for(int y=0;y<DestBitmapHeight;y++)
{
int SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine);
int SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine);
if(SrcBitmapx>=0&&SrcBitmapx<Image1->Width&&SrcBitmapy>=0&&
SrcBitmapy<Image1->Height)
{
Image2->Canvas->Pixels[x][y]=PaintBox1->Canvas->Pixels[SrcBitmapx][SrcBitmapy];
}
}
}
BitBlt(PaintBox1->Canvas->Handle, 0, 0, PaintBox1->ClientWidth, PaintBox1->ClientHeight, Image2->Canvas->Handle, 0, 0, SRCCOPY);
delete Image2;这样子太慢了,有其他好的方法吗
...全文
相关推荐
c++builder写的俄罗斯方块游戏
源代码文件通常以.cpp和.h为扩展名,其中.cpp是实现文件,包含了函数定义和类的实现;.h是头文件,包含了类的声明和函数原型。资源文件可能包含了游戏界面的图片、音频等素材。
C++ Builder把图片旋转90度示例程序
在C++ Builder中,对图片进行旋转操作是常见的图像处理需求。这个示例程序将教你如何使用C++ Builder实现图片90度旋转的功能。
CBuilder图像批量压缩旋转
在C++Builder中,使用FreeImage库可以实现图像的旋转,库提供了预定义的角度(90度、180度、270度)以及自定义角度的旋转功能,同时处理旋转后可能出现的边界问题。
c++builder如何展示动画效果
通过以上知识点的掌握和实践,开发者可以在C++Builder中创建出各种各样的动画效果,无论是简单的滚动文本、旋转图标,还是复杂的2D/3D游戏场景,都能在C++Builder的舞台上生动展现。
C++Builder6编程实例精解
- **复活节彩蛋:** C++Builder中包含了一些有趣的隐藏特性或彩蛋,增加开发乐趣。- **帮助系统:** 提供详尽的帮助文档,包括API文档、示例代码等,帮助开发者解决问题。


数据库及相关技术
