delphi有办法旋转或翻转图片么?

delphi有办法旋转或翻转图片么?

delphi有办法旋转或翻转图片么? Delphi / Windows SDK/API


http://www.delphi2007.net/DelphiMultimedia/html/delphi_20060929153916275.html

rt  

  要求效率比较高  

  谢谢

沙发  
  随便google下不都可以找一堆吗

procedure   TForm1.RotateangleClick(Sender:   TObject);  
  var  
      newbmp:   TBitmap;  
      Bitmap:   TBitmap;  
      angle:   integer;  
  begin  
      newbmp   :=   TBitmap.Create;  
      Bitmap   :=   TBitmap.Create;  
      screen.Cursor   :=   crhourglass;  
      newbmp.Assign(image1.Picture.Bitmap);  
      //newbmp.pixelFormat:=pf8bit;  
      //Bitmap.pixelFormat:=pf8bit;  
      angle   :=   strtoint(inputbox(‘旋转位图’,   ‘请输入旋转角度’,   ’90’));  
      Bmp_Rotate(newbmp,   bitmap,   angle);  
      image1.picture.Bitmap.Assign(bitmap);  
      image1.Left   :=   (self.Width   div   2)   –   (bitmap.Width   div   2);  
      image1.Top   :=   (self.Height   div   2)   –   (bitmap.Height   div   2);  
      screen.Cursor   :=   crdefault;  
      newbmp.Free;  
      Bitmap.Free;  
  end;

 
  procedure   Tform1.bmp_rotate(Srcbmp,   DestBmp:   Tbitmap;   angle:   extended);  
  var  
      c1x,   c1y,   c2x,   c2y:   integer;  
      p1x,   p1y,   p2x,   p2y:   integer;  
      radius,   n:   integer;  
      alpha:   extended;  
      c0,   c1,   c2,   c3:   tcolor;  
  begin  
      if   SrcBmp.Width   >   SrcBmp.Height   then  
      begin  
          DestBmp.width   :=   SrcBmp.Width;  
          DestBmp.height   :=   SrcBmp.Width;  
      end  
      else  
          DestBmp.Width   :=   SrcBmp.Height;  
      DestBmp.Height   :=   SrcBmp.Height;  
      //将角度转换为PI值  
      angle   :=   (angle   /   180)   *   pi;  
      //   计算中心点,你可以修改它  
      c1x   :=   SrcBmp.width   div   2;  
      c1y   :=   SrcBmp.height   div   2;  
      c2x   :=   DestBmp.width   div   2;  
      c2y   :=   DestBmp.height   div   2;  
      //   步骤数值number  
      if   c2x   <   c2y   then  
          n   :=   c2y  
      else  
          n   :=   c2x;  
      dec(n,   1);  
      //   开始旋转  
      for   p2x   :=   0   to   n   do  
      begin  
          for   p2y   :=   0   to   n   do  
          begin  
              if   p2x   =   0   then  
                  alpha   :=   pi   /   2  
              else  
                  alpha   :=   arctan2(p2y,   p2x);  
              radius   :=   round(sqrt((p2x   *   p2x)   +   (p2y   *   p2y)));  
              p1x   :=   round(radius   *   cos(angle   +   alpha));  
              p1y   :=   round(radius   *   sin(angle   +   alpha));  
   
              c0   :=   SrcBmp.canvas.pixels[c1x   +   p1x,   c1y   +   p1y];  
              c1   :=   SrcBmp.canvas.pixels[c1x   –   p1x,   c1y   –   p1y];  
              c2   :=   SrcBmp.canvas.pixels[c1x   +   p1y,   c1y   –   p1x];  
              c3   :=   SrcBmp.canvas.pixels[c1x   –   p1y,   c1y   +   p1x];  
   
              DestBmp.Canvas.pixels[c2x   +   p2x,   c2y   +   p2y]   :=   c0;  
              DestBmp.canvas.pixels[c2x   –   p2x,   c2y   –   p2y]   :=   c1;  
              DestBmp.canvas.pixels[c2x   +   p2y,   c2y   –   p2x]   :=   c2;  
              DestBmp.canvas.pixels[c2x   –   p2y,   c2y   +   p2x]   :=   c3;  
          end;  
          application.processmessages  
      end;  
  end;

用IMAGEEN控件可以做很多效果,并且速度很快

http://www.efg2.com/Lab/ImageProcessing/RotateScanline.htm  
  这个是用扫描线来做得   速度很快   自己看懂改下   就能用了

以上答案都正确

这么多分,我接!可以下一本<<delphi数字图象处理>>来看看!

发现个好组件:TRotateImage

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110935.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 标志寄存器——标志位

    标志寄存器——标志位标志位简介:   标志寄存器,又称程序状态寄存器(它的内容是ProgramStatusWord,PSW).这是一个存放条件码标志,控制标志和系统标志的寄存器.6个状态标志位   CF—进位标志,加法时的最高位(D7或D15)产生进位或减法时最高位出现借位,则CF=1,否则CF=0;   AF—辅助进位标志,供BCD码使用。当D3位出现进位或借位时AF=1,否则AF=0

    2022年7月14日
    14
  • Java代码实现文件上传「建议收藏」

    Java代码实现文件上传「建议收藏」Java代码实现文件上传在文件上传过程中,文件是以流的形式从浏览器提交到服务端的。一般情况下采用Apache公司的开源文件上传组件common-fileupioad来进行文件的上传。由于common-fileupioad依赖于common-io,所以还要下载common-io这个包。准备工作:下载jar包,建立项目,把包导入lib目录,将lib添加到项目输出目录,配置好Tomcat。我们只…

    2022年5月14日
    50
  • linux添加用户及用户权限管理命令_docker用户权限

    linux添加用户及用户权限管理命令_docker用户权限Linux添加用户及用户权限管理1.新建用户(组)①用户新建用户需要通过指令useradd来实现。useradd的一些基本用法如下:useraddusername 新建一个用户useradd-uuidusername 指定用户的uiduseradd-ggidusername 指定用户的gid(一定要存在)useradd-Ggiduseradd指定用户的附加组(…

    2025年8月2日
    2
  • 简单理解冯诺依曼计算机模型[通俗易懂]

    引入计算机是如何工作的,冯诺依曼体系结构是最好的体现,如图1。冯诺依曼结构是由数学家冯·诺依曼提出,主要由运算器、控制器、存储器、输入设备、输出设备5部分组成。要点1.数据和指令一视同仁,都采用二进制存储。2.按照程序顺序执行,也就是按照顺序从内存中一条一条读取指令。组成1.运算器:顾名思义,主要进行计算,算术运算、逻辑运算等都由它来完成。2.存储器:这里存储器只是内存,不包括内存,用于存储数据、指令信息。3.控制器:控制器是是所有设备的调度中心,系统的正常运行都是有它来调配。4.输入设

    2022年4月7日
    99
  • transactionscope mysql_TransactionScope事务操作

    transactionscope mysql_TransactionScope事务操作using(TransactionScopetrans=newTransactionScope()){try{InsertUserBase();//它插入不成功,自己回滚UserInfosuserInfo=newUserInfos{UserID=”1″,RealName=”zzl”,};db.UserInfos.InsertOnSubmit(userInfo);db.SubmitC…

    2022年7月24日
    11
  • 笑说程序员的工作_程序员工作辛苦吗

    笑说程序员的工作_程序员工作辛苦吗笑说程序员的工作

    2022年4月22日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号