Tre*_*ott 5 c# graphics gdi+ scaletransform
我正在使用GDI +进行自定义绘图.
通常情况下,如果我想要适合我正在绘制的窗口,我会计算出适当的比例,并且我按比例调整ScaleTransform的所有内容:
e.Graphics.ScaleTransform(ratio, ratio);
Run Code Online (Sandbox Code Playgroud)
ScaleTransform的问题在于它可以缩放包括笔划和笔刷在内的所有内容.
我可以缩放我绘制的所有像素坐标吗?每个线,矩形或路径基本上都是一系列点.所以我可以手动将所有这些点乘以比率,但是有一个简单的替代方案可以更加无缝地完成吗?
您可以包装GDI图形对象并存储比例因子
interface IDrawing
{
void Scale(float sx, float sy);
void Translate(float dx, float dy);
void SetPen(Color col, float thickness);
void DrawLine(Point from, Point to);
// ... more methods
}
class GdiPlusDrawing : IDrawing
{
private float scale;
private Graphics graphics;
private Pen pen;
public GdiPlusDrawing(Graphics g)
{
float scale = 1.0f;
}
public void Scale(float s)
{
scale *= s;
graphics.ScaleTransform(s,s);
}
public void SetPen(Color color, float thickness)
{
// Use scale to compensate pen thickness.
float penThickness = thickness/scale;
pen = new Pen(color, penThickness); // Note, need to dispose.
}
// Implement rest of IDrawing
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5014 次 |
| 最近记录: |