坐标映射的图形,困扰我好几天的问题!(100分)

  • 主题发起人 主题发起人 topload
  • 开始时间 开始时间
T

topload

Unregistered / Unconfirmed
GUEST, unregistred user!
var
maxx,minx,maxy,miny :integer;
begin
maxx :=300;
minx := -100;
maxy := 400;
miny := -100;


BackImage.Picture := nil;

BackImage.Left := 0;
BackImage.Top := 0;
BackImage.Width := maxX - minX;
BackImage.Height := maxY - minY;

SetMapMode(BackImage.Canvas.Handle,MM_LOMETRIC);
SetViewportOrgEx(BackImage.Canvas.Handle,abs(MinX),abs(maxy),nil);


BackImage.Canvas.MoveTo(0,0);
BackImage.Canvas.LineTo(maxX,0);
BackImage.Canvas.LineTo(maxX,maxY);
BackImage.Canvas.LineTo(0,maxY);
BackImage.Canvas.LineTo(0,0);
BackImage.Canvas.LineTo(minX,0);
BackImage.Canvas.LineTo(minX,maxY);

BackImage.Canvas.LineTo(0,maxY);
BackImage.Canvas.LineTo(0,0);

发现在映射后,原来的图变成了在backimage中的一个部份!
请问如何才能得到映射后的这一块图形(或都是说是它在原图中的坐标)?
 
BackImage.Canvas.Handle 是一个 DC 值,视口被确定为了 BackImage 。
如果你需要在别的 DC 上绘图,请使用正确的 DC 来定义视口。
 
to:云携雨(新生)
我想你没有明白我的意思,如果你把上面的代码执行一下,就会看到一个框!
我的意思是说如果得到这个框的边界(或是说这个框中的图形)!
 
你试试下面的代码看看用什么办法解决它:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
BackImage: TImage;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
P:TPoint;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
maxx,minx,maxy,miny :integer;
begin
maxx :=300;
minx := -100;
maxy := 400;
miny := -100;
BackImage.Picture := nil;
BackImage.Left := 0;
BackImage.Top := 0;
BackImage.Width := maxX - minX;
BackImage.Height := maxY - minY;
SetMapMode(BackImage.Canvas.Handle,MM_LOMETRIC);
SetViewportOrgEx(BackImage.Canvas.Handle,abs(MinX),abs(MaxY),@P);
BackImage.Canvas.MoveTo(0,0);
BackImage.Canvas.LineTo(maxX,0);
BackImage.Canvas.LineTo(maxX,maxY);
BackImage.Canvas.LineTo(0,maxY);
BackImage.Canvas.LineTo(0,0);
BackImage.Canvas.LineTo(minX,0);
BackImage.Canvas.LineTo(minX,maxY);
BackImage.Canvas.LineTo(0,maxY);
BackImage.Canvas.LineTo(0,0);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
vP,fP:TPoint;
begin
fP:=self.ClientOrigin; // 这个表示的是 Form 当前的视口原点
VP:=ClientToScreen(P); // 这个是你设置的新视口原点
ShowMessage(Format('当前Form原点X:%d,当前Form原点Y:%d;新视口X:%d,新视口Y:%d',[fP.x,fP.y,vP.x,vP.y])); // 看看他们的值怎么了
end;
end.
移动一下 Form 再点 Button2 看显示的消息。
 
没大懂你的意思!
再直接一点吧,怎么把BACKIMAGE中的框中的那一块图形取出来?
 
一个函数
ImageDest.Canvas.CopyRect(Rect(目标区域),BACKIMAGE.Canvas,Rect(源区域));
 
不太明白你的意思,也没看懂你的写法是要达到什么目的,
不过提醒想你一下,MM_LOMETRIC 模式的原点在左下角;

我是随便说说,不必介意。。。
 
我想各位都没有明白我的意思!我的意思说把映射后的那一块图形COPY出来!

fengyuan的书很好!
http://www.fengyuan.com/

 
后退
顶部