Delphi图像处理
图像旋转,是指按照给定的角度,计算出图像每个像素坐标点在新图像上的坐标位置,从而实现整个图像坐标变换的图像处理手段。其像素坐标的变换公式为:
(1)、x' = x * cos(angle) + y * sin(andle)
y' = x * cos(andle) - y * sin(angle)
公式中,x',y'为变换后的像素坐标点,x,y为变换前像素坐标点,angle为旋转角度。
但是,按照上面的公式旋转图像,会出现多个原图像像素点对应新图像同一个点的问题,这不仅会多消耗图像旋转处理的时间,而且也会使旋转后的图像产生不必要的失真,如果是32位带Alpha通道像素格式的图像,更会因此造成图像的混乱,所以在实际的图像旋转处理代码中,是以目标图(旋转后的图像)的像素坐标点,逐点反推原图像素的位置,这样,目标图的各个像素点既不会重复,也不会遗漏。其计算公式为:
(2)、x = x' * cos(angle) - y * sin(angle)
y = y' * cos(angle) + y * sin(angle)
下面是Delphi图像旋转处理的代码:
过程定义:
// 获取Width * Height图像旋转Angle时,完全包含图像所需尺寸
function GetRotateSize(Width, Height: Integer; Angle: Single): TSize;
// 旋转图像,OffsetX和OffsetY分别为图像偏移量,为0时Source与Dest左上边对齐,
// Alpha为顺时针旋转角度,IpMode为插值方式
procedure ImageRotate(Dest: TImageData; OffsetX, OffsetY: Integer;
const Source: TImageData; Angle: Single; IpMode: TInterpolateMode = imDefault); overload;
// 图像自身旋转,中心点在图像的中央
procedure ImageRotate(Data: TImageData; Angle: Single;
ColorBackground: LongWord = 0; IpMode: TInterpolateMode = imDefault); overload;
// 按缺省方式旋转图像(Source与Dest左上边对齐)。
procedure ImageRotate(Dest: TImageData; const Source: TImageData;
Angle: Single; IpMode: TInterpolateMode = imDefault); overload;
// TGraphic对象旋转到Dest
procedure ImageRotate(Dest: TImageData;
const Source: TGraphic; Angle: Single; IpMode: TInterpolateM
相关文档:
delphi中Webbrowser问题收集
获得网页中变量值 htm中<script> var currID=123</script> 程序中可以这么调用 id := Form1.WebBrowser1.OleObject.Document.script.currID 值得说明的是,变量可以是javascript定义的,也可以是vbs ......
ListView1.Items 为标准 Tlistitems类
ListView1.Items
(1)赋值
with ListView1.Items.Add do
begin
Caption:=caption; //添加第一项
SubItems.add(aaaaa); //添加后面数据
SubItems.add(1234);
SubItems.add(1234);
end; //一定要使用WITH结构.
(2)取值
listview1.Items.Item[i].Caption 取得某条数据标题
l ......
总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法以及SQL语句中日期格式的表示(#)、('')
在Delphi中进行字符变量连接相加时单引号用('''),又引号用('''')表示
首先定义变量
var
AnInt:integer=123;//为了方便在此都给它们赋初值。虽然可能在引赋初值在某些情况下不对
AnIntStr:string='456'; ......
Delphi的TThread类
http://bigpower.blog.51cto.com/209892/89525
我们常有工作线程和主线程之分,工作线程负责作一些后台操作,比如接收邮件;主线程负责界面上的一些显示。工作线程的好处在某些时候是不言而喻的,你的主界面可以响应任何操作,而背后的线程却在默默地工作。
VCL中,工作线程执行在Execute方法中 ......