如何放大矩形中绘制的填充样式? [关闭]

2023-11-26

我正在使用 .Net 绘图来绘制图表。它本质上是一个堆积条形图。 我遇到的问题是,我想减少填充样式中的线条数量,以便在某种程度上放大它以使其更清晰。我环顾四周,但没有发现任何可以帮助我的东西。

我绘制一个矩形,然后使用填充画笔填充它,但由于图像大小,填充填充变得不太清晰。感谢您的任何建议。

hashStyles 和画笔类型存储在数据库中,我使用辅助函数来返回它们。所以我画了一个矩形,在拿到画笔后我填充了这个矩形。本质上,如果可以的话,我想扩大填充填充。

 g.DrawRectangle(gridpen, startX, startY, BOREHOLE_RECT_WIDTH, layerRectHeight);

 brush = GetBoreholeBrush(l.SoilTypeMatrixLevel1Id.PrimaryBrushType,
                          l.SoilTypeMatrixLevel1Id.PrimaryFillStyle, 
                          l.SoilTypeMatrixLevel1Id.PrimaryColour);

 g.FillRectangle(brush, startX, startY, BOREHOLE_RECT_WIDTH, layerRectHeight);

以及getBrush函数;画笔类型、填充样式和颜色存储在数据库中并用于创建返回的画笔:

    //===================================
    private Brush GetBoreholeBrush(string BrushType, string HatchStyle, string Colour)
    //===================================
    {
        //Decide on what brush type has been chosen.
        Brush brush;
        if (BrushType.ToLower() == BrushTypes.HatchBrush.ToString().ToLower())
        {
            brush = new HatchBrush(GetHatchStyle(HatchStyle), 
                                   Color.Black, ColorTranslator.FromHtml(Colour));
        }
        else if (BrushType.ToLower() == BrushTypes.SolidBrush.ToString().ToLower())
        {
            brush = new HatchBrush(GetHatchStyle(HatchStyle), 
                                   Color.Black, ColorTranslator.FromHtml(Colour));
        }
        else if (BrushType.ToLower() == BrushTypes.TextureBrush.ToString().ToLower())
        {
            brush = new HatchBrush(GetHatchStyle(HatchStyle), 
                                   Color.Black, ColorTranslator.FromHtml(Colour));
        }
        else
        {
            brush = new HatchBrush(GetHatchStyle(HatchStyle), 
                                   Color.Black, ColorTranslator.FromHtml(Colour));
        }

        return brush;
    }

返回填充样式的函数:

   //===================================
    private HatchStyle GetHatchStyle(string FillStyle)
    //===================================
    {
        //Loop through each hatch tyle and return the correct one.
        foreach (HatchStyle style in Enum.GetValues(typeof(HatchStyle)))
        {
            if (style.ToString().ToLower() == FillStyle.ToLower())
            {
                return style;
            }
        }
        return HatchStyle.Vertical;
    }

正如您在下图中看到的,填充样式并不清晰。

enter image description here


最直接但可能不是很有帮助的答案是:不,你不能缩放填充图案HatchBrush.

它的目的是始终在像素级别上看起来清晰,甚至不受缩放的影响Graphics object.

看着你的问题,我想知道:你确定你真的在使用HatchBrush?您可以从函数中获取画笔GetBoreholeBrush。如果您确实已将索引存储到 50舱口样式那么我猜你真的用了HatchBrush.

现在使用HatchBrush不起作用我想你可以使用TextureBrush反而..

您可以通过放大填充图案将其转换为更大的版本;这并不完全是一个简单的转换。通过整数因子绘制较大值并且不使用抗锯齿的直接方法很简单,并且可能足够好。

但你可能需要微调它们,因为这样所有像素,即两者线像素 and 背景像素放大并且所有对角线都会看起来呈锯齿状。

因此,您需要平衡填充尺寸和描边宽度,并以更大的尺寸从头开始重新创建所需的所有图案。

这是一个示例,说明了简单解决方案的问题;第一行是原始填充图案,其他行是简单的纹理画笔结果,按 1x、2x 和 3x 缩放......:

enter image description here

首先是一个转换 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根本没有那样的事..

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何放大矩形中绘制的填充样式? [关闭] 的相关文章

随机推荐

  • Convert.ToDateTime('Datestring') 为所需的 dd-MM-yyyy 日期格式

    我有日期字符串 可以是任何日期格式 但我想将其转换为dd MM yyyy format 我已经尝试过每一个Convert ToDatetime仅转换为系统格式的选项 我想要它转换dd MM yyyy格式 请回复 提前致谢 尝试这个 Date
  • 如果被同名变量覆盖则调用内置函数

    我有一个变量type我想使用内置的type 功能 Example def fun inv log debug type of inv format type inv type int 当我运行该函数时出现以下错误 AttributeErro
  • subprocess.Popen 的输出

    我一直在编写一些 python 代码 在我的代码中我使用了 命令 该代码按我的预期工作 但后来我在 Python 文档中注意到该命令已被弃用并将在 Python 3 中删除 我应该使用 subprocess 代替 好吧 我想 我不希望我的代
  • 将列表解压为变量

    我有一个清单 row Title url 33 title2 keyword 有没有一种更Pythonic的方法来解压这些值 例如 title url price title2 keyword row 0 row 1 row 2 row 3
  • weblogic.application.ModuleException:上下文路径 '' 已被模块使用:/应用程序:

    当我尝试运行 weblogic server 12c 时 它抛出此错误并且无法启动
  • 如何使用 ASP.NET 检测页面关闭事件

    我有一个带有 MasterPage 和内容页面的 ASP NET Web 应用程序 当我单击MenuItem打开一个新的 aspx 页面 如果我想关闭新的页面浏览器选项卡 我想显示一个弹出窗口或对话框 提醒用户他正在关闭浏览器选项卡 我不知
  • Bash printf %q 无效指令

    我想更改 bashrc 文件中的 PS1 我找到了一个使用 printf 和 q 指令来转义字符的脚本 bin bash STR printf q PS1 u h w sed i PS1 c STR bashrc 问题是我收到此错误 scr
  • Google 翻译活动不再起作用

    我编写了一个程序 通过调用 Google Translator android 应用程序Intent ACTION VIEW 问题是调用谷歌翻译应用程序不再起作用 尽管它曾经起作用过 该代码与此处给出的代码相同 从 Google Trans
  • Android LocationManager.isProviderEnabled() 始终返回 false

    我有一个使用网络提供商作为其位置的应用程序 每次应用程序启动时 它都会检查网络提供商是否已启用isProviderEnabled LocationManager 中的方法 如果返回 false 我会向用户发出警报以启用网络提供商 然后使用该
  • 寻找转换器:php 到 javascript [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我想知道是否有任何可用的转换器 可以将 简单 php 代码转换为 javascript 我是什么not寻找的是 ajax 东西或模仿 php 功能的
  • 无限可枚举仍然是“可枚举的”吗?

    就像两条重叠的线段一样 我们可以找到无限的交点 列举所有这些点可能没有意义 我们可能只是想表明这个集合是无穷大的 浮点数已定义NegativeInfinity and PositiveInfinity 一个数字代表count or ordi
  • sql中查找同一个表中连续两行之间的时间差

    我被困住了 我一直在寻找答案 但似乎无法找到从同一张表的两个不同行中减去同一张表中适合的时间 我在执行以下查询时遇到困难 在下表中 我想区分一行的 TimeOut 和下一行的 TimeIn 请考虑在下表中查找第 1 行中的 TimeOut
  • 带有分支过滤器的 GitHub Actions 标签过滤器

    GitHub 操作允许使用分支和标签过滤器 但它们似乎不能一起工作 例如 此工作流在推送到 master 时运行or用标签推动 name npm Publish on push branches master tags v 我想设置一个发布
  • Excel 多个条件的中位数

    基本上在Excel中我想要一张表格 就像下面右边给出的那样 我的数据规模比给出的例子大得多 它有每个主题 每个条件的中位数 例如TADA TADP TPDA TPDP 理想情况下 我会使用数据透视表 但是 Excel 不会在数据透视表中执行
  • Python3双向串口通信:读入数据

    我正在尝试通过Python3建立双向通信 我的 USB 端口之一插入了一个激光测距仪 我想向其发送 接收命令 我有一张可以发送的命令以及它们将返回的内容 因此这部分已经存在 我需要的是一种实时方便的方法 到目前为止我有以下代码 import
  • GameKit 无线网络连接?

    我读到 从 iPhone OS 3 1 开始 GameKit 支持 wifi 连接 但文档指出 如果您的应用程序配置了 对等选择器允许互联网 连接 您的应用程序必须 还解雇同行选择器和 提供自己的配置界面 互联网连接 这还成立吗 如果是这样
  • 为什么我的类型化数据集不喜欢临时表?

    我正在尝试将表适配器添加到 SQL Server 2005 Express 中的存储过程 然而 存储过程使用一个名为 temp 的临时表 创建表适配器时 Visual Studio 抱怨 未知对象 temp 并表示存储过程返回 0 列 这是
  • 如何静音“其类型使用匿名命名空间 [-Werror]”gcc 版本 4.8.2

    在我的项目的一个头文件中 以下行包含在inline method typedef boost archive iterators transform width
  • Codeigniter/PHP 会话安全问题

    我正在使用 Codeigniter 开发一个 Web 应用程序 当用户通过我的网站进行身份验证时 我当前将他们的 用户标识符 存储在我的会话 cookie 中 我已启用加密 我的几个模型类使用会话 cookie 的 用户标识符 参数中的值来
  • 如何放大矩形中绘制的填充样式? [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我正在使用 Net 绘图来绘制图表 它本质上是一个堆积条形图 我遇到的问题是 我想减少填充样式中的线条数量 以便在某种程度上放大它以使其更清晰 我环顾四周 但没有发现任何可以帮助我的东