1
A
回答
7
像Sertac已經評論,請使用SetWorldTransform
:
procedure TForm1.Button1Click(Sender: TObject);
var
XForm: TXForm;
begin
if PrintDialog1.Execute then
with Printer do
begin
BeginDoc;
SetGraphicsMode(Canvas.Handle, GM_ADVANCED);
PrintTo(Canvas);
XForm.eM11 := Cos(DegToRad(180));
XForm.eM12 := Sin(DegToRad(180));
XForm.eM21 := -Sin(DegToRad(180));
XForm.eM22 := Cos(DegToRad(180));
XForm.eDx := PageWidth;
XForm.eDy := PageHeight;
SetWorldTransform(Canvas.Handle, XForm);
PrintTo(Canvas);
EndDoc;
end;
end;
procedure TForm1.PrintTo(ACanvas: TCanvas);
begin
with ACanvas do
begin
Font.Size := 180;
TextOut(0, 0, 'Test text');
Pen.Width := 40;
MoveTo(0, 0);
LineTo(3000, 3000);
end;
end;
0
您可以在重複部分畫到一個臨時的位圖,並繪製該位圖的兩倍打印機的畫布,一旦上旋轉。旋轉可以例如完成與PlgBlt:
procedure RotateBitmap180(Source, Dest: TBitmap);
var
Points: array[0..2] of TPoint;
begin
if (Source <> nil) and (Dest <> nil) then
with Source, Canvas do
begin
Dest.Width := Width;
Dest.Height := Height;
Points[0].X := Width - 1;
Points[0].Y := Height - 1;
Points[1].X := -1;
Points[1].Y := Height - 1;
Points[2].X := Width - 1;
Points[2].Y := -1;
PlgBlt(Dest.Canvas.Handle, Points, Handle, 0, 0, Width, Height, 0, 0, 0);
Dest.Modified := True;
end;
end;
注:有辦法可以更有效地旋轉程序,因爲PlgBlt不僅轉動而且還可以進行擴展。但是這個簡短的工作。
相關問題
- 1. 如何在Android中旋轉在畫布上繪製的矩形?
- 2. 在畫布上繪製旋轉圖像
- 3. 在畫布上繪製旋轉元素
- 4. HTML5畫布繪製旋轉圖像部分
- 5. Android旋轉位圖並繪製畫布
- 6. HTML5用畫布繪製,旋轉線?
- 7. 如何在HTML5的畫布中部分繪製路徑?
- 8. 在畫布上繪製圖像部分
- 9. 隨機畫布部分的繪製
- 10. Android:在畫布上繪圖和旋轉
- 11. 如何在畫布上繪製畫布
- 12. 在畫布上繪製CSS轉換(比例,旋轉,左,右)
- 13. 在畫布中以角度繪製圖像而不旋轉畫布
- 14. 在畫布上繪製螺旋圈
- 15. 如何在具有動態旋轉值的HTML5畫布中繪製水印?
- 16. 如何使用lineTo()方法在畫布中繪製旋轉的橢圓?
- 17. 如何在畫布上繪製由特定值旋轉的位圖的一部分
- 18. 旋轉'可以在畫布上繪製的東西'
- 19. 如何在HTML5畫布中繪製和旋轉圖像以及文本
- 20. 如何重新繪製畫布的特定部分?
- 21. 旋轉畫布
- 22. 旋轉畫布
- 23. 繪製靜態文本在旋轉畫布
- 24. 在HTML5畫布上繪製旋轉文字
- 25. 旋轉和繪製動畫的單幀
- 26. 在畫布中填充繪製圖像的一部分
- 27. Java:如何在畫布中繪製?
- 28. 如何從外部文件中的數據繪製在畫布
- 29. 如何複製粘貼畫布的旋轉部分而沒有重疊或多個畫布?
- 30. 如何在畫布旋轉後檢測畫布上的點
我認爲你最好把繪圖代碼抽象成一個例程,然後繪製兩次,一次旋轉一次,再旋轉一次。 –
有很多線條,文字。這就是爲什麼我認爲這將是很好的,如果我可以將它旋轉180度 – John
爲什麼你不說你想旋轉180°?!這比一般的旋轉要容易得多! –