gpt4 book ai didi

delphi - 旋转对GetPath没有影响吗?

转载 作者:行者123 更新时间:2023-12-03 15:56:20 25 4
gpt4 key购买 nike

我正在使用 Delphi (XE5) 创建图形组件。一项挑战是通过 SetWorldTransform 旋转闭合路径,然后使用 GetPath 读回轮廓。旋转工作正常,但从 GetPath 检索的点没有旋转(但是,获取区域 (PathToRegion) 可以按预期工作!)。

我的代码:

procedure Rotate(DestBitmap : TBitmapEx; Radians : Single;  FigureRect : TRect);

// DestBitmap is where to draw the figure. Size of DestBitmap is computed from
//the actual angle and figure size (not shown here). FigureRect is the plain
//figure rectangle without rotation

var
XForm: tagXFORM;
C, S : single;
Points : array of TPoint;
NumPoints : integer;
Bytes : TByteArray;
Rgn : HRGN;
X, Y : integer;

begin
//Locate FigureRect to center of bitmap:
X := (DestBitmap.Width - FigureRect.Width) div 2;
Y := (DestBitmap.Height - FigureRect.Height) div 2;
FigureRect.Location := Point(X,Y);

//Set rotate mode
C := Cos(Radians);
S := Sin(Radians);
XForm.eM11 := C;
XForm.eM12 := S;
XForm.eM21 := -S;
XForm.eM22 := C;
XForm.eDx := (DestBitmap.Width - DestBitmap.Width * C +
DestBitmap.Height * S) / 2;
XForm.eDy := (DestBitmap.Height - DestBitmap.Width * S -
DestBitmap.Height * C) / 2;
SetGraphicsMode(DestBitmap.Canvas.Handle, GM_ADVANCED);
SetWorldTransform(DestBitmap.Canvas.Handle, XForm);

//Rotate the figure
BeginPath(DestBitmap.Canvas.Handle);
DestBitmap.Canvas.Rectangle(FigureRect);
EndPath(DestBitmap.Canvas.Handle);
FlattenPath(DestBitmap.Canvas.Handle);
NumPoints := GetPath(DestBitmap.Canvas.Handle, Points[0], Bytes[0], 0);
SetLength(Points, NumPoints);
GetPath(DestBitmap.Canvas.Handle, Points[0], Bytes[0], NumPoints);

//Points now describes the plain, unrotated figure, but if instead:
//Rgn := PathToRegion(DestBitmap.Canvas.Handle);
//Rgn describes the rotated area, as expected
end;

最佳答案

这是预期的,GetPath 返回逻辑坐标中的点。而 PathToRegion 的结果区域使用设备坐标 - 因此它不受变换的影响。请参阅这两个函数的文档。

或者三个,SetWorldTransform 转换逻辑坐标。对于逻辑世界中的一切来说,没有任何改变。变换是相对于设备而言的。

关于delphi - 旋转对GetPath没有影响吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26544589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com