使用c#从图像中裁剪十字矩形

2024-02-21

我想做的基本上是从图像中裁剪一个矩形。但是,它应该满足一些特殊情况:

  1. 我想在图像上裁剪一个有角度的矩形。
  2. 我不想旋转图像并裁剪矩形:)
  3. 如果裁剪超出图像大小,我不想裁剪空的背景颜色。

我想从起点的后面进行裁剪,当矩形尺寸完成时,它将在起点处结束。我知道我无法很好地解释,所以如果我以视觉方式展示我想要的内容:

蓝点是那里的起点,箭头显示裁剪方向。当裁剪超过图像边界时,它将回到起点的后面,当矩形宽度和高度完成时,矩形的末端将在起点处。

除此之外,这是我之前问的问题:

  • 如何使用 C# 从图像中裁剪十字矩形? https://stackoverflow.com/questions/8699103/how-to-crop-a-cross-rectangle-from-an-image-using-c

在这个问题中,我无法预测图像尺寸可能会出现问题,因此我没有提出要求。但现在有了情况3。除了情况3,这是完全相同的问题。我该怎么做,有什么建议吗?


需要做的就是给矩阵对齐添加偏移量。在本例中,我从矩形的每一边(总共 9 个矩形)中取出一个额外的长度,并每次对矩阵进行偏移。

注意需要设置偏移量0(原始作物)最后,否则你会得到错误的结果。

另请注意,如果您指定的矩形大于旋转图片,您仍然会得到空白区域。

public static Bitmap CropRotatedRect(Bitmap source, Rectangle rect, float angle, bool HighQuality)
{
    int[] offsets = { -1, 1, 0 }; //place 0 last!
    Bitmap result = new Bitmap(rect.Width, rect.Height);
    using (Graphics g = Graphics.FromImage(result))
    {
        g.InterpolationMode = HighQuality ? InterpolationMode.HighQualityBicubic : InterpolationMode.Default;
        foreach (int x in offsets)
        {
            foreach (int y in offsets)
            {
                using (Matrix mat = new Matrix())
                {
                    //create the appropriate filler offset according to x,y
                    //resulting in offsets (-1,-1), (-1, 0), (-1,1) ... (0,0)
                    mat.Translate(-rect.Location.X - rect.Width * x, -rect.Location.Y - rect.Height * y);
                    mat.RotateAt(angle, rect.Location);
                    g.Transform = mat;
                    g.DrawImage(source, new Point(0, 0));
                }
            }
        }
    }
    return result;
}

要重新创建您的示例:

Bitmap source = new Bitmap("C:\\mjexample.jpg");
Bitmap dest = CropRotatedRect(source, new Rectangle(86, 182, 87, 228), -45, true);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用c#从图像中裁剪十字矩形 的相关文章

随机推荐

  • 属性错误:“NoneType”对象没有属性“parent”

    from urllib request import urlopen from bs4 import BeautifulSoup html urlopen http www pythonscraping com pages page3 ht
  • 可以使用其他编程语言(python/C#)中的 Mathematica 吗?

    是否可以使用其他语言的 Mathematica 计算能力 我需要执行一些复杂的操作 顺便说一句 不一定是符号操作 如果能够直接从我的 python c 程序调用 Mathematica 的函数或运行 Mathematica 的代码 那就太好
  • 如何在rails 3.2.1中使用link_to和ajax

    我在用着轨道3 2 1 如何将 link to 与 remote gt true 一起使用 我在控制器中的方法 def clickme clk you click me respond to do format format js rend
  • Spring Boot 2 - 更改 Jar 名称

    我在 Gradle 项目中使用 Spring Boot 2 在 Jenkins 中构建 jar 我想更改该 jar 文件的名称 默认情况下 Spring Boot 2 使用 Gradle 属性rootProject name 可以在 set
  • 等待 JUnit 测试用例中测试的代码生成的所有线程

    如何确保在 JUnit 测试用例中 由被测方法直接 间接生成的所有线程都已完成该作业 以便我可以断言最终结果 Test public void testMethod Result result method may spawn multip
  • EF Composite 关键流畅 API

    我正在尝试映射实体的复合键 public class Customer public int CustomerId get set public virtual List
  • write() 参数必须是 str,而不是字节 [重复]

    这个问题在这里已经有答案了 我是一名初学者程序员 正在阅读 Python 初学者 一书 我在尝试为问答游戏编写高分函数时遇到了一个问题 当调用函数 highscore user highscore 时 我尝试相应地分配参数 以便我可以将信息
  • 获取 keyvault 的访问令牌

    我在本地发布了一个 Web 应用程序并将其连接到 IIS 当我尝试导航到该网站时 它在启动时失败 并在尝试访问该网站时出现以下错误keyvault 应用程序启动异常 Microsoft Azure Services AppAuthentic
  • 如何通过 Bootstrap 选项卡使用 AJAX 加载?

    我使用了 bootstrap tabs js 并且它运行得很好 但我没有找到有关如何通过AJAX请求加载内容的信息 那么 如何通过 bootstrap tabs js 使用 AJAX 加载呢 在 Bootstrap 2 0 及更高版本中 您
  • 如何通过网络驱动器快速获取 .csv 文件的最后一行?

    我存储了数千个时间序列 csv网络驱动器上的文件 在更新文件之前 我首先获取文件的最后一行以查看时间戳 然后使用该时间戳之后的数据进行更新 如何快速获取最后一行 csv文件通过网络驱动器 这样我就不必加载整个巨大的 csv文件只使用最后一行
  • 什么是获得颜色以使图像上的文本突出的好算法?

    例如下图 背景是一张照片 照片中央有一个 伊涅斯塔 这个人物 但由于颜色不好 字符有些难以阅读 有没有什么好的算法可以获取颜色以使图像上的字符突出 您可以使用以下技巧 而不是制作矩形背景 确实看起来不太好 选择两种对比色 例如白色和黑色 使
  • 使用php获取两个日期之间的总时间差[重复]

    这个问题在这里已经有答案了 可能的重复 如何使用 PHP 计算两个日期之间的差异 https stackoverflow com questions 676824 how to calculate the difference betwee
  • 为什么我不能编写与 Box::new 类型相同的函数?

    如果我编写一个接受一个类型参数的函数 f32 相对于例如 f32 我得到一个错误 the trait bound f32 std marker Sized is not satisfied 文档说这是因为 f32 没有编译时已知的大小 合理
  • 如何将 Autofac 与 WepApi 2 和 Owin 集成?

    我正在使用此包将 Autofac 与我的 WebApi Owin 应用程序集成 https www nuget org packages Autofac WebApi2 Owin https www nuget org packages A
  • 合并包含COCO人物关键点注释的json文件

    我使用注释了一些图像可可注释器 https github com jsbroks coco annotator 我想将这些注释与现有注释 person keypoints train2017 json 和 person keypoints
  • MobileVLCKit 编译时失败

    我正在尝试在我的应用程序中使用适用于 iOS 的 MobileVLCKit 我按照 给出的步骤进行操作构建 iOS 框架 https wiki videolan org VLCKit 我已在 Xcode 5 中将部署目标设置为 iOS 7
  • 在 Slick 3 的事务中执行非数据库操作

    我无法理解新的 SlickDBIOActionAPI 文档中似乎没有很多示例 我使用的是 Slick 3 0 0 我需要执行一些数据库操作 还需要对从数据库接收的数据进行一些计算 但所有这些操作都必须在单个事务内完成 我正在尝试执行以下操作
  • 如何更新jqgrid中的数据值

    我试图在加载时永久更新 jqgrid 中的单元格 我知道我可以使用setCell但这只会更新该页面的值 如果我回到该页面 如果我没有明确执行另一个setCell对于单元格 显示旧值 我也尝试过 setRowData 但它似乎在做同样的事情
  • 无法提交 JPA 事务:事务标记为 rollbackOnly

    我在我正在开发的应用程序之一中使用 Spring 和 Hibernate 但在处理事务时遇到了问题 我有一个服务类 它从数据库加载一些实体 修改它们的一些值 然后 当一切都有效时 将这些更改提交到数据库 如果新值无效 我只能在设置后检查 我
  • 使用c#从图像中裁剪十字矩形

    我想做的基本上是从图像中裁剪一个矩形 但是 它应该满足一些特殊情况 我想在图像上裁剪一个有角度的矩形 我不想旋转图像并裁剪矩形 如果裁剪超出图像大小 我不想裁剪空的背景颜色 我想从起点的后面进行裁剪 当矩形尺寸完成时 它将在起点处结束 我知