最直接但可能不是很有帮助的答案是:不,你不能缩放填充图案HatchBrush
.
它的目的是始终在像素级别上看起来清晰,甚至不受缩放的影响Graphics
object.
看着你的问题,我想知道:你确定你真的在使用HatchBrush
?您可以从函数中获取画笔GetBoreholeBrush
。如果您确实已将索引存储到 50舱口样式那么我猜你真的用了HatchBrush
.
现在使用HatchBrush
不起作用我想你可以使用TextureBrush
反而..
您可以通过放大填充图案将其转换为更大的版本;这并不完全是一个简单的转换。通过整数因子绘制较大值并且不使用抗锯齿的直接方法很简单,并且可能足够好。
但你可能需要微调它们,因为这样所有像素,即两者线像素 and 背景像素放大并且所有对角线都会看起来呈锯齿状。
因此,您需要平衡填充尺寸和描边宽度,并以更大的尺寸从头开始重新创建所需的所有图案。
这是一个示例,说明了简单解决方案的问题;第一行是原始填充图案,其他行是简单的纹理画笔结果,按 1x、2x 和 3x 缩放......:
首先是一个转换 a 的函数HatchBrush
to a TextureBrush
TextureBrush TBrush(HatchBrush HBrush)
{
using (Bitmap bmp = new Bitmap(8,8))
using (Graphics G = Graphics.FromImage(bmp))
{
G.FillRectangle(HBrush, 0, 0, 8, 8);
TextureBrush tb = new TextureBrush(bmp);
return tb;
}
}
请注意,填充图案是8x8
pixels.
Now the Paint
上图使用的代码:
private void panel1_Paint(object sender, PaintEventArgs e)
{
var hs = (HatchStyle[])Enum.GetValues(typeof(HatchStyle));
for (int i = 0; i < hs.Length; i++)
using (HatchBrush hbr = new HatchBrush(hs[i], Color.GreenYellow))
using (HatchBrush hbr2 = new HatchBrush(hs[i], Color.LightCyan))
{
e.Graphics.FillRectangle(hbr, new Rectangle(i * 20, 10,16,60));
using (TextureBrush tbr = TBrush(hbr2))
{
e.Graphics.FillRectangle(tbr, new Rectangle(i * 20, 80, 16, 60));
tbr.ScaleTransform(2, 2);
e.Graphics.FillRectangle(tbr, new Rectangle(i * 20, 150, 16, 60));
tbr.ResetTransform();
tbr.ScaleTransform(3,3);
e.Graphics.FillRectangle(tbr, new Rectangle(i * 20, 220, 16, 60));
}
}
}
请注意,虽然TextureBrush
有很好的方法来修改纹理,HatchBrush
根本没有那样的事..