各位朋友,帮忙看看坐标转换的问题,我的目的是实现线条放大两倍(P1(0,0),P2(50,50)),但是无法实现?var
DC, MemDC: HDC;
MemBitmap, OldBitmap: HBITMAP;
TmpRect:TRect;
Zoom:Real;
begin
Zoom := 2;
TmpRect.Left :=0;
TmpRect.Top :=0;
TmpRect.Right :=Round(200*Zoom);
TmpRect.Bottom:=Round(200*Zoom);
try
DC := GetDC(0);
MemBitmap := CreateCompatibleBitmap(DC,TmpRect.Right,TmpRect.Bottom);
finally
ReleaseDC(0, DC);
end; MemDC := CreateCompatibleDC(0);
OldBitmap := SelectObject(MemDC, MemBitmap);
try
try
SetMapMode(MemDC, MM_ANISOTROPIC);//MM_ISOTROPIC
SetWindowExtEx(MemDC, 200, 200, nil);
SetViewPortExtEx(MemDC,TmpRect.Right,TmpRect.Bottom, nil); SelectObject (MemDC, GetStockObject (WHITE_PEN));
MoveToEx(MemDc,0,0,0);
LineTo(MemDc,50,50);
finally
//TmpCvs.Free;
end; DC := GetDC(Handle);
BitBlt(Dc, 0, 0, 200,200, MemDC, 0, 0, SRCCOPY);
finally
ReleaseDC(Handle,Dc);
SelectObject(MemDC, OldBitmap);
DeleteDC(MemDC);
DeleteObject(MemBitmap);
end;
end;后来我在不使用内存位图的情况下,又可以实现放大操作
SetMapMode(Canvas.Handle, MM_ISOTROPIC);//MM_ISOTROPIC
SetWindowExtEx(Canvas.Handle, 100, 100, nil);
SetViewPortExtEx(Canvas.Handle,400 ,400 , nil); Canvas.Pen.Style := psSolid;
Canvas.moveto(0,0);
Canvas.lineto(50,50);
为什么呢?
DC, MemDC: HDC;
MemBitmap, OldBitmap: HBITMAP;
TmpRect:TRect;
Zoom:Real;
begin
Zoom := 2;
TmpRect.Left :=0;
TmpRect.Top :=0;
TmpRect.Right :=Round(200*Zoom);
TmpRect.Bottom:=Round(200*Zoom);
try
DC := GetDC(0);
MemBitmap := CreateCompatibleBitmap(DC,TmpRect.Right,TmpRect.Bottom);
finally
ReleaseDC(0, DC);
end; MemDC := CreateCompatibleDC(0);
OldBitmap := SelectObject(MemDC, MemBitmap);
try
try
SetMapMode(MemDC, MM_ANISOTROPIC);//MM_ISOTROPIC
SetWindowExtEx(MemDC, 200, 200, nil);
SetViewPortExtEx(MemDC,TmpRect.Right,TmpRect.Bottom, nil); SelectObject (MemDC, GetStockObject (WHITE_PEN));
MoveToEx(MemDc,0,0,0);
LineTo(MemDc,50,50);
finally
//TmpCvs.Free;
end; DC := GetDC(Handle);
BitBlt(Dc, 0, 0, 200,200, MemDC, 0, 0, SRCCOPY);
finally
ReleaseDC(Handle,Dc);
SelectObject(MemDC, OldBitmap);
DeleteDC(MemDC);
DeleteObject(MemBitmap);
end;
end;后来我在不使用内存位图的情况下,又可以实现放大操作
SetMapMode(Canvas.Handle, MM_ISOTROPIC);//MM_ISOTROPIC
SetWindowExtEx(Canvas.Handle, 100, 100, nil);
SetViewPortExtEx(Canvas.Handle,400 ,400 , nil); Canvas.Pen.Style := psSolid;
Canvas.moveto(0,0);
Canvas.lineto(50,50);
为什么呢?
解决方案 »
- report machine 报表会的请进...
- report machine 或fast report导出excel后, 图片模糊
- 网页中图片按钮如何提交!
- menu
- 怎么安装window服务!
- 关于 数据库与excel 表的导入导出!~~~~
- 学delphi的??????不知大家怎么了。我是一个新手,想学。看到你们给提问题的人话让人失望
- 请问有谁知道QTINTF70.DLL是个什么东西,有差不多4M?我做的程序中可以不用它吗?
- 急!!!! 如何解决在一个显示控件中写入大量数据的问题!!
- ADOQuery1.Post提交数据修改后未更新数据库
- 关于登陆的问题请指教
- 关于“存储空间不足,无法执行此命令”的错误
var
DC, MemDC,SavedDC: HDC;
MemBitmap, OldBitmap: HBITMAP;
NewPen,OldPen:Integer;
Zoom:Integer;
begin
Zoom := StrToInt(edtZoom.Text);
try
DC := GetDC(0);
MemBitmap := CreateCompatibleBitmap(DC,800,600);
finally
ReleaseDC(0, DC);
end; MemDC := CreateCompatibleDC(Canvas.Handle);
OldBitmap := SelectObject(MemDC, MemBitmap);
try
SavedDC := SaveDC(MemDC);
try
SetMapMode(MemDC, MM_ANISOTROPIC);
SetWindowExtEx(MemDC, 100, 100, nil);
SetViewPortExtEx(MemDC,Zoom,Zoom, nil); SelectObject(MemDC,GetStockObject(BLACK_BRUSH)) ;
SelectObject(MemDC,GetStockObject(WHITE_PEN));
NewPen:= CreatePen(PS_SOLID,1,clWhite);
OldPen := SelectObject(MemDc,NewPen); MoveToEx(MemDc,0,0,0);
LineTo(MemDC,50,50);
finally
SelectObject(MemDc,OldPen);
DeleteObject(NewPen);
RestoreDC(MemDC, SavedDC);
end; DC := GetDC(Handle);
BitBlt(Dc, 20, 50, 200,200, MemDC, 0, 0, SRCCOPY);
finally
ReleaseDC(Handle,Dc);
SelectObject(MemDC, OldBitmap);
DeleteDC(MemDC);
DeleteObject(MemBitmap);
end;