delphi 图像旋转

网络搜集的 觉得有用的拿去吧  速度不错呢

//旋转90°
procedure Rotate(Bitmap: TBitmap);
type
  THelpRGB = packed record
    rgb: TRGBTriple;
    dummy: byte;
  end;

  pRGBArray = ^TRGBArray;
  TRGBArray = array[0..32767] of TRGBTriple;
var
  aStream: TMemorystream;
  //内存流
  header: TBITMAPINFO;
  dc: hDC;
  P: ^THelpRGB;
  x, y, b, h: Integer;
  RowOut: pRGBArray;
begin
  //创建内存流
  aStream := TMemoryStream.Create;
  //设置大小,必须是4的倍数
  aStream.SetSize(Bitmap.Height * Bitmap.Width * 4);
  with header.bmiHeader do //操作位图文件
  begin
    biSize := SizeOf(TBITMAPINFOHEADER); //大小
    biWidth := Bitmap.Width; //位图宽
    biHeight := Bitmap.Height; //位图高
    biPlanes := 1;
    biBitCount := 32;
    //无压缩
    biCompression := 0;
    biSizeimage := aStream.Size;
    biXPelsPerMeter := 1; //水平分辨率
    biYPelsPerMeter := 1; //竖直分辨率
    biClrUsed := 0;
    biClrImportant := 0;
  end;
  dc := GetDC(0);
  P := aStream.Memory;
  GetDIBits(dc, Bitmap.Handle, 0, Bitmap.Height, P, header, dib_RGB_Colors);
  ReleaseDC(0, dc);
  b := bitmap.Height; //源图高
  h := bitmap.Width; //源图宽
  //指定要创建的位图的大小尺寸
  bitmap.Width := b;
  bitmap.height := h;
  for y := 0 to (h - 1) do
  begin
    rowOut := Bitmap.ScanLine[y]; //获取新的位图信息
    P := aStream.Memory; //设置文件指针
    inc(p, y); //指针移位
    for x := 0 to (b - 1) do
    begin
      rowout[x] := p^.rgb; //进行数据转移
      inc(p, h);
    end;
  end;
  aStream.Free; //释放资源
end;

 

后面这个不好找 

//反向旋转90°
procedure Rotate2(aBitmap: TBitmap);
var
  nIdx, nOfs,
  x, y, i, nMultiplier: integer;
  nMemWidth, nMemHeight, nMemSize, nScanLineSize: LongInt;
  aScnLnBuffer: PChar;
  aScanLine: PByteArray;
begin
  nMultiplier := 3;
  nMemWidth := aBitmap.Height;
  nMemHeight := aBitmap.Width;
  //实际需要内存大小
  nMemSize := nMemWidth * nMemHeight * nMultiplier;
  //开辟内存
  GetMem(aScnLnBuffer, nMemSize);
  try
    //Scanline的长度
    nScanLineSize := aBitmap.Width * nMultiplier;
    //为ScanLine分配内存
    GetMem(aScanLine, nScanLineSize);
    try
      for y := 0 to aBitmap.Height - 1 do
      begin
        //进行数据块的移动
        Move(aBitmap.ScanLine[y]^, aScanLine^, nScanLineSize);
        for x := 0 to aBitmap.Width - 1 do
        begin
          nIdx := ((aBitmap.Width - 1) - x) * nMultiplier;
          nOfs := (x * nMemWidth * nMultiplier) + (y * nMultiplier);
          for i := 0 to nMultiplier - 1 do
            Byte(aScnLnBuffer[nOfs + i]) := aScanLine[nIdx + i];
        end;
      end;
      //宽和高交换开始,逆时针旋转
      aBitmap.Height := nMemHeight;
      aBitmap.Width := nMemWidth;
      for y := 0 to nMemHeight - 1 do
      begin
        //数据移动
        nOfs := y * nMemWidth * nMultiplier;
        Move((@(aScnLnBuffer[nOfs]))^, aBitmap.ScanLine[y]^, nMemWidth *
          nMultiplier);
      end;
    finally
      //释放内存aScanLine
      FreeMem(aScanLine, nScanLineSize);
    end;
  finally
    //释放内存aScnLnBuffer
    FreeMem(aScnLnBuffer, nMemSize);
  end;
end;

  

  

转载于:https://www.cnblogs.com/doorsky/p/5596490.html

Delphi图像旋转实现与性能优化详解 二维笛卡尔坐标系由两个相互垂直的轴组成:x轴(水平方向)和y轴(垂直方向)。每个点的位置由一个有序对 $(x, y)$ 表示。在图像处理中,通常将图像左上角作为原点 $(0,0)$,向右为x轴正方向,向下为y轴正方向。这种坐标系与数学中的标准笛卡尔坐标系有所不同,后者通常以左下角为原点。因此,在进行图像旋转时,需要注意坐标系方向的转换。graph TDA[二维笛卡尔坐标系] --> B[图像坐标系]A --> C[数学坐标系]B --> D[(0,0)在左上角] 阅读详情

相关推荐

Delphi图像旋转控件开发与实战

Delphi是一款经典的快速应用开发(RAD)工具,广泛应用于Windows平台的桌面程序开发。其集成开发环境(IDE)界面清晰、操作直观,集成了代码编辑器、窗体设计器、调试器等核心组件,极大地提升了开发效率。VCL框架是Delphi开发的核心支撑,具有以下显著特性:组件化设计:所有UI元素都是组件,可复用、可继承、可扩展。事件驱动机制:支持事件绑定,如点击、拖拽、键盘输入等。高封装性:隐藏底层复杂逻辑,简化开发流程。良好的性能表现。

weixin_42311427的博客 845

Delphi 汇编学习(十一)--- 图像旋转的极致优化

图像旋转原理: 假设对图片上任意点(x,y),绕一个坐标点(rx0,ry0)逆时针旋转RotaryAngle角度后, 新的坐标设为(x', y'),有公式: x'= (x - rx0)*cos(RotaryAngle) + (y - ry0)*sin(RotaryAngle) + rx0 ; y'=-(x - rx0)*sin(RotaryAngle) + (y - ry0)*cos(RotaryAngle) + ry0 ; 那么,根据新的坐标点求源坐标点的公式为: x=(x'- rx0)...

dbyoung的Delphi专栏 2650

Delphi中的图片处理:二值化和任意角度旋转实践

Delphi是一种支持快速应用程序开发(RAD)的编程语言,它提供了一系列工具和组件,可以有效地处理图像。对于图像处理领域,Delphi的强大之处在于其丰富的图形库和组件,使得操作图像变得简单快捷。从加载、显示到图像的转换、处理和保存,Delphi通过直观的编程接口简化了复杂的过程。除了使用第三方库,我们也可以自定义函数来实现图像的任意角度旋转。自定义旋转函数涉及线性代数中的矩阵运算,通过设置旋转矩阵来实现。以下是一个自定义的旋转函数示例:usesvarbeginend;

weixin_42602368的博客 1217

Delphi图像处理 -- 图像旋转

图像旋转,是指按照给定的角度,计算出图像每个像素坐标点在新图像上的坐标位置,从而实现整个图像坐标变换的图像处理手段。其像素坐标的变换公式为: (1)、x' = x * cos(angle) + y *sin(andle) y' = x * -sin(angle)+y * cos(andle) 公式中,x',y'为变换后的像素坐标点,x,y为变换前像素坐标点,angle为旋转角度。 ...

sogotobj 1803

Delphi旋转JPG图像

摘要:Delphi源码,图形处理,旋转图像  Delphi旋转JPG图像,使用Delphi旋转、显示JPG图像,相对较初级的Delphi图像处理实例,仅供参考。

Delphi 图像自由旋转控件 RotateImg

Delphi编程控件~支持图像旋转,1.54~

delphi 图片旋转

图片旋转

fogbow622的博客 937

一个Delphi图像旋转控件

摘要:Delphi源码,图形处理,图像旋转  一款适用于delphi环境的图像旋转处理控件,自带测试例子,编译前请先引入控件,实例挺简单的,欢迎初学者下载源码。

Delphi图像自由旋转控件RotateImg:轻松实现图像旋转

Delphi图像自由旋转控件RotateImg:轻松实现图像旋转 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在软件开发领域,图像处理是一个常见需求。Delphi图像自由旋转控件 RotateImg 正是为了满足这一需求而诞生。该控件能够帮助开发者轻松实现图像在Delphi应用程序中的自由旋转,大大简化了图像处理的相关工作。 项目技术分析 核心功能 自由旋转:Ro...

gitblog_06739的博客 1046

delphi基于gdi+的图片旋转任意角度

本程序在10.2下编译通过。 特点: 1. 先计算旋转后的图片大小,以免出来旋转后,部分图片超过边界。 2.返回TGPBitmap类型,方便再次处理。如保存、显示图片等。

win11 使用 QEMU 配置龙芯 3A5000 虚拟环境

win11 使用 QEMU 配置龙芯 3A5000 虚拟环境

一朵花开的时间 6150

【亲测免费】 Delphi 图像自由旋转控件 RotateImg

Delphi 图像自由旋转控件 RotateImg 去发现同类优质开源项目:https://gitcode.com/ 欢迎使用Delphi图像自由旋转控件 RotateImg!这是一个功能强大的Delphi编程控件,能够轻松实现图像的自由旋转。 控件简介 标题:Delphi 图像自由旋转控件 RotateImg 版本:1.54 该控件支持图像在Delphi应用程序中进行旋转操作,为开发者提供了...

gitblog_06789的博客 504

Zemax操作33--5倍激光扩束器

5倍扩束

lzy750750的博客 2930

Delphi实现图像文本旋转特效完整代码

Delphi实现图像文本旋转特效完整代码,本程序利用的控件主要是Panel 控件、Image 控件、Edit 控件、Label 控件和Button 控件。本程序的关键是利用Delphi 的bmp_rotate()函数来实现旋转图像。并巧妙地调用相关Windows API 函数来实现对文本的旋转。以下是完整代码: unit Unit1; interface uses Windows...

weixin_30376163的博客 468

手把手教你用mitmproxy抓包抖音数据流(附Python脚本模板)

本文详细介绍了如何使用mitmproxy抓包抖音数据流,包括环境搭建、证书安装和Python脚本模板。从mitmproxy配置到抖音API解析,提供完整的移动端数据流分析方案,帮助开发者快速掌握数据抓取技术,适用于应用优化、竞品分析和安全审计等场景。

weixin_33670786的博客 307

zynq+ad9361 petalinux使用官方IIO示波器调试记录

1ad9361 iio示波器

Yetob的博客 7991

java文本转delphi文本_Delphi实现图像文本旋转特效完整实例代码

unit Unit1;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,math,StdCtrls, ExtCtrls;typeTForm1 = class(TForm)Edit1: TEdit;Image1: TImage;bmprotate: TButton;Label1:...

weixin_32924297的博客 222

【AUTOSAR-COM】Transmission Mode 和 Transfer Property

1.COM模块的基本概念 首先在描述Transmission Mode 和 Transfer Property之前,有必要对COM模块的基本处理有一个直观的理解,我所描述的和对概念理解的也不一定完全正确。 Signal:指的是通信协议中的,一条报文中所保存的若干信号。 I-PDU:至少在COM模块中,可以理解为一条报文。 上图是在CANdb软件中编辑一个报文的Layout的界面,可以很形象的将I-PDU对等为这里的一条Message,而Signal就是需要在Message中需要摆放的Signal

tim_hoven的博客 4634

delphi 实现屏幕旋转代码_基于FPGA的图像旋转设计

该项目是参加2019届全国大学生FPGA大赛的作品,系统主要实现视频任意角度旋转。利用国产的紫光同创公司的FPGA芯片作为开发平台,视频图像从摄像头实时采集,经过算法旋转后,通过hdmi接口显示。该项目最终晋级决赛,并获得紫光同创企业特别奖。一,图像旋转原理图像旋转是指图像按照某个位置转动一定角度的过程,旋转中图像仍保持这原始尺寸。图像旋转后图像的水平对称轴、垂直对称轴及中心坐标原点都可...

weixin_39535527的博客 268

23种设计模式-代理(Proxy)设计模式

软考中级-软件设计师 代理设计模式

片言可决讼,半纸能缚龙 1783

点云配准3:3d-ndt算法在pcl上的实现以及参数设置

3d-ndt算法在pcl上的使用方法以及参数设置

诺有缸的高飞鸟的博客 7891

bmp图像的90度旋转

从网上搜到的,一开始是用canvas.pixel处理,实在是太慢 又搜到了scanline方式的, 实测逆时针90旋转好用,就又改了一个顺时针90度旋转的 (对delphi一知半解,最后是试出来的,前后花了近两天时间;中间还被迫使用三次逆时针90度来代替顺时针90度,实在是汗...) procedure rotate2(bmpfilename: PChar); stdcall; var sourcebmp: Graphics.TBitmap; nIdx, nOfs, x, y, i...

zbguohua的专栏 1361

AI智能体丨使用Coze一键生成爆款书单视频,3个月内获赞131.1w!(附保姆级教程)

这篇教程详细介绍了如何使用扣子(Coze)平台的AI智能工作流批量制作爆款书单视频。通过自动化流程,只需1-2分钟即可生成45-50秒的书单视频,效率提升近百倍。工作流包含文案生成、音频合成、图片素材获取、视频剪辑等全流程,支持随机生成8本书单、自动提取金句、智能配音等功能。教程提供了完整的操作步骤,包括剪映草稿配置、特效添加等细节,并附体验链接和示例效果。最终生成的视频包含书单展示、金句字幕、背景音乐等元素,适合书单号运营者快速批量产出内容。

李同学Lino的博客 2354

delphi 图像旋转速度_用ImageJ快速分析和处理图像

用ImageJ快速分析和处理图像ImageJ是一款由美国国立卫生研究院(NIH)开发的软件,原名NIH Image,适用于McIntosh、Windows和Linux等系统。ImageJ旨在对图像进行更好的分析和处理,可以下载或在线使用,运行需Java 1.4或更高版本。产品特点ImageJ是一款通用软件,用户可使用它运行程序,编写和修改代码,并向他人分享。该软件可以创建并修改图形,支持多种文件格...

weixin_33454551的博客 541

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Delphi 2010 新增功能之: TWICImage 类[2] - 图像的旋转变换

TWICImage 的大多功能都非常容易使用, 它最强大的功能是 ImagingFactory: IWICImagingFactory 属性, 这是个类工厂的接口. 所谓类工厂是 COM 里的概念, COM 通过类工厂可以自己实例化一些类, 实例化后我们只管使用就是. 通过 TWICImage.ImagingFactory 获取类工厂后, 再调用 CreateBitmapFlipR...

weixin_34185364的博客 195

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

上一篇: Canvas: Out of system resources
下一篇: 阿里妈妈账号登录状态如何长时间保存
data01002
博客等级 码龄12年 4粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值