前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >delphi有办法旋转或翻转图片么?

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

作者头像
全栈程序员站长
发布2021-08-05 15:49:07
1.4K0
发布2021-08-05 15:49:07
举报

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.cn/110935.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档