是否可以通过在页面上获取三个点来校正页面尺寸?

2024-01-03

我正在研究纠正页面(图像)的宽度、高度和角度的逻辑。 点r1、r2、r3在正确图像上,点d1、d2、d3是当前图像上的对应点。

我尝试了多种方法并最终解决了这个问题。

public System.Drawing.Bitmap CorrectFileDimentionsV2(System.Drawing.Bitmap bitmap, PagePoints pagePoints)
    {
        BitmapHelper bitmapHelper = new BitmapHelper();
        var bitmapImage = bitmapHelper.Bitmap2BitmapImage(bitmap);
        DrawingVisual MyPath = new DrawingVisual();
        using (DrawingContext dc = MyPath.RenderOpen())
        {
            TransformGroup transform = new TransformGroup();

            Point r1 = pagePoints.ADash;
            Point r2 = pagePoints.BDash;
            Point r3 = pagePoints.CDash;

            Point d1 = pagePoints.A;
            Point d2 = pagePoints.B;
            Point d3 = pagePoints.C;

            Vector vr21 = r2 - r1;
            Vector vd21 = d2 - d1;

            Vector vr31 = r3 - r1;
            Vector vd31 = d3 - d1;

            double y1 = Vector.CrossProduct(vr31, vr21) / vr21.Length;
            double y2 = Vector.CrossProduct(vd31, vd21) / vd21.Length;

            transform.Children.Add(new TranslateTransform(-r1.X, -r1.Y));
            transform.Children.Add(new ScaleTransform(vd21.Length / vr21.Length, y2 / y1));
            transform.Children.Add(new RotateTransform(Vector.AngleBetween(vr21, vd21)));
            transform.Children.Add(new TranslateTransform(d1.X, d1.Y));

            dc.PushTransform(transform);
            dc.DrawImage(bitmapImage, new Rect(0, 0, bitmapImage.Width, bitmapImage.Height));
            dc.Pop();
        }
            Image theImage = new Image();
            DrawingImage dImageSource = new DrawingImage(dGroup);
            theImage.Source = dImageSource;

            using (MemoryStream ms = new MemoryStream())
            {
                PngBitmapEncoder encoder = new PngBitmapEncoder();
                encoder.Frames.Add(BitmapFrame.Create(ToBitmapSource(dImageSource)));
                encoder.Save(ms);

                using (System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(ms))
                {
                    bmpOut = new System.Drawing.Bitmap(bmp);
                }
            }
        return bmpOut;
    }

我不会直接回答您的问题:但是对齐扫描图像的常用技术是使用仿射变换。它是一个基于 a,b,c,a',b',c' 的 3x3 矩阵方程。通过简单的矩阵乘法,您可以计算另一个图像系统中的每个坐标或对所有像素进行完整的变换。

很抱歉没有为您提供有效的示例。看https://www.graphicsmill.com/docs/gm/affine-and-projective-transformations.htm https://www.graphicsmill.com/docs/gm/affine-and-projective-transformations.htm and https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.matrixtransform?view=netframework-4.8 https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.matrixtransform?view=netframework-4.8用于 WPF RenderTransform。

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

是否可以通过在页面上获取三个点来校正页面尺寸? 的相关文章

随机推荐

  • 如何在 Jekyll 中从 Liquid 块生成文件?

    我正在写一个plugin https gist github com 3469301定义了一个新的 Jekyll 块ditaa 块中的任何内容都应从迪塔标记 http ditaa sourceforge net 到图像文件 并将该图像插入帖
  • VBA VS. VSTO有什么区别,我应该升级吗?

    我是 KISS 原则 保持简单 的忠实粉丝 并且是 excel VBA 的长期用户 然而 我能找到的所有关于 VBA 与 VSTO Visual Studio Tools for Office 的文章似乎都非常复杂 首先 我厌倦了 Exce
  • 在 Python 中使用多个参数进行字符串格式化(例如“%s ... %s”)

    我有一个看起来像这样的字符串 s in s 我想知道如何分离参数 使它们成为两个不同的 s 我的想法来自于 Java s in s unicode self author unicode self publication 但这不起作用 那么
  • 添加图例来指示形状

    需要一些帮助来为图中使用的形状添加图例 如下所述 该图如下 它是一个箱形图 表示平均值的点 表示置信区间的误差线 结果图如下 我如何添加一个图例来告诉red circles表明mean和green error bars表明confidenc
  • 有没有办法按两个字段对 Jekyll 中的列表进行排序?

    有没有办法使用 Jekyll Liquid 按两个字段对列表进行排序 例如 先按年份排序 然后按标题排序 我努力了 assign list site data papers papers sort year sort title 但这使得它
  • 使用 Visual Studio 测试适配器增强单元测试 - 设置工作目录

    我正在尝试使用 boost 单元测试 并使用 Visual Studio 测试适配器集成到 VS 2013 中 我的单元测试测试了一个库 该库需要另一个 DLL 存在于其工作目录中 它是通过在链接器设置下的 附加输入 中指定 lib 来链接
  • Android KitKat chrome://inspect/devices 网络监控,如何查看所有请求数据

    我正在使用 chrome inspect devices 并监控 Android 应用程序的 http 流量 这仅适用于 Android 4 4 KitKat 在这个工具中 set cookie 和 cookie 数据不会显示 是否有其他工
  • 获取AppServiceProvider中的路由参数

    我在应用程序的每条路线中都设置了公司参数 我正在尝试将该公司的变量发送到每个视图以便于访问 在我的 AppServiceProvider php 中 我尝试了两件事 company App make request gt route gt
  • 字符串与十六进制值的用户定义文字

    关于这个问题 https stackoverflow com questions 63197844 vector from long hex value 63213120 63213120 为什么a用户定义的文字 https en cppr
  • ASP MVC 3:如何对选择列表进行客户端验证?

    在阅读了这里的一些问题 答案后 我设法弄清楚如何将选择列表添加到表单并用数据填充它 如下所示 Html DropDownList S new SelectList ViewBag S Id Nme Sel a S 而且效果很好 不过我想补充
  • 在 Linux 上 - 将最大打开文件数设置为无限制。可能的?

    是否可以将打开文件的最大数量设置为某个 无限 值 或者必须是一个数字 我需要将守护程序用户的描述符限制设置为 无限制 我正在尝试确定这是否可能或如何做到 我看到一些邮件列表引用了可以使用的 最大值 例如 myuser Hard nofile
  • 如何读取JSON数据?

    这是json数据格式吗 string json answer Line 1 mark 1 answer Line 3 mark 1 我尝试下面的代码 但它只适用于一个参数 前任 answer Line 1 mark 1 我尝试拆分 json
  • VS Code devcontainer - Dockerfile 中的 containerUser 和 USER 有什么区别?

    来自doc https code visualstudio com docs remote devcontainerjson reference containerUser 覆盖在容器内运行的所有操作的用户 容器 默认为 root 或最后一
  • 使用 SAX 解析器解析大型 XML 文件(跳过一些行/标签)

    我目前正在开发一个使用 SAX 从互联网检索数据的应用程序 我之前用它来解析简单的 XML 文件 例如 Google Weather API 然而 我感兴趣的网站将解析提升到了一个新的水平 页面很大 看起来很乱 我只需要检索一些特定的行 其
  • 使用 cluster.fork() 调试 Node.js 进程

    我有一些代码看起来非常类似于集群文档中的示例 http nodejs org docs v0 6 0 api cluster html http nodejs org docs v0 6 0 api cluster html 以机智 var
  • 检测 macOS 上的用户活动

    我使用函数 IOPMSchedulePowerEvent 来安排睡眠或唤醒事件 并使用 IORegisterForSystemPower 注册我的守护程序以接收电源状态更改 一切正常 当系统进入睡眠状态并稍后在预定时间醒来时 我的守护进程会
  • 如何添加新的 xib 文件

    我必须开发一个具有多个屏幕的应用程序 我已经自动生成了 xib 文件 但对于我的另一个屏幕 我需要另一个 xib 文件 如何创建另一个 xib 文件 假设 XCode 4 在 文件 gt 新建文件 菜单对话框中 有一个名为 用户界面 的小节
  • JSF 组件中立即=true VS 立即=false

    我正在阅读 Core JavaServer Faces 并且正在研究事件处理 它表示 如果某个组件 比如说按钮 的immediate true 那么当我们单击该按钮时 JSF 生命周期的流程验证和调用应用程序面将提前完成 这是什么意思 任何
  • bash:睡眠进程没有被杀死[重复]

    这个问题在这里已经有答案了 我写了一个简单的 bash 脚本 它除了休眠之外什么也不做 bin bash echo Sleeping sleep 180s 运行脚本后 我看到系统上正在运行两个进程 user 22880 0 0 0 0 12
  • 是否可以通过在页面上获取三个点来校正页面尺寸?

    我正在研究纠正页面 图像 的宽度 高度和角度的逻辑 点r1 r2 r3在正确图像上 点d1 d2 d3是当前图像上的对应点 我尝试了多种方法并最终解决了这个问题 public System Drawing Bitmap CorrectFil