查看: 117|回复: 2

将位图旋转90度

[复制链接]
发表于 2016-10-17 16:28:11 | 显示全部楼层 |阅读模式 来自 甘肃
本文将介绍如何将一张位图旋转90度。向工程添加一个Timage控件,取名为Image1。
工作原理是:创建一个位图缓冲区用于存储中间量,将原位图的每一行的像素转换为每一列然后存放在我们创建的位图缓冲区中。最后,将旋转后的位图从缓冲区存回原位图。
//定义缓冲位图并剪切图形区域
Graphics::Tbitmap *bufferbitmap=new Graphics::Tbitmap();
bufferbitmap->Width=Image1->Height;
bufferbitmap->Height=Image1->Width;
static Trect sourcepix,destpix,fullbufferimage,fulldestimage;
fullbufferimage.Left= 0;
fullbufferimage.Top= bufferbitmap->Height;
fullbufferimage.Right= bufferbitmap->Width;
fullbufferimage.Bottom= 0;
//旋转并逐像素地拷贝原位图到缓冲位图
for (int y=0; y[I]Height; y++)
{
  for (int x=0; x[I]Width; x++)
  {
   sourcepix.Left= x;
   sourcepix.Top= y+1;
   sourcepix.Right= x+1;
   sourcepix.Bottom= y;
   destpix.Left=y;
   destpix.Top=bufferbitmap->Height-x;
   destpix.Right=y+1;
   destpix.Bottom=bufferbitmap->Height-x-1;
   bufferbitmap->Canvas->CopyRect(destpix,Image1->Canvas,sourcepix);
  }
}
//调整原位图的尺寸并拷贝旋转后的缓冲位图到原位图
Image1->Width=bufferbitmap->Width;
Image1->Height=bufferbitmap->Height;
Image1->Picture->Bitmap->Width=bufferbitmap->Width;
Image1->Picture->Bitmap->Height=bufferbitmap->Height;
Image1->Canvas->CopyRect(fullbufferimage,bufferbitmap->Canvas,fullbufferimage);
卓航论坛免责声明
Discuz X 最新常见问题解决方案 https://bbs.piaoxian.net/thread-77402-1-1.html (出处: 飘仙建站论坛)
回复

使用道具 举报

发表于 2016-10-18 19:37:51 | 显示全部楼层 来自 香港
不知该说些什么。。。。。。就是谢谢
回复 支持 反对

使用道具 举报

发表于 2016-10-20 10:01:14 | 显示全部楼层 来自 日本
我是个凑数的。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖
关注公众号
QQ客服返回顶部