小编goo*_*dev的帖子

为什么在MouseUp事件之后发生MouseMove事件?

WindowsForms我刚刚添加了事件处理程序,如下所示:

    private void Form1_MouseDown(object sender, MouseEventArgs e)
    {
        Debug.WriteLine($"=> Form1_MouseDown, Clicks: {e.Clicks}, Location: {e.Location}");
    }

    private void Form1_MouseUp(object sender, MouseEventArgs e)
    {
        Debug.WriteLine($"=> Form1_MouseUp, Clicks: {e.Clicks}, Location: {e.Location}");
    }

    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
        Debug.WriteLine($"=> Form1_MouseMove, Clicks: {e.Clicks}, Location: {e.Location}");
    }
Run Code Online (Sandbox Code Playgroud)

输出为:

=> Form1_MouseMove, Clicks: 0, Location: {X=17,Y=21}
=> Form1_MouseDown, Clicks: 1, Location: {X=17,Y=21}
=> Form1_MouseUp,   Clicks: 1, Location: {X=17,Y=21}
=> Form1_MouseMove, Clicks: 0, Location: {X=17,Y=21}
Run Code Online (Sandbox Code Playgroud)

您可以看到所有事件都发生在同一位置,所以我的问题是为什么一个MouseMove事件接一个事件MouseUp发生?

我也尝试过类似的代码在WPF和MouseMove事件发生。 …

.net c# windows visual-c++ winforms

15
推荐指数
2
解决办法
436
查看次数

如何使用DirectWrite平衡面向脚本的OpenType功能与其他OpenType功能?

完全披露:我正在研究我的libui GUI框架的文本API.这包括Windows上的DirectWrite,OS X上的Core Text和其他Unix上的Pango(它使用HarfBuzz进行OpenType整形).我想要指定的文本格式化属性之一是要使用的OpenType功能的集合,这三者都提供了这些功能.DirectWrite是IDWriteTypography.

现在,当您使用这些库绘制一些文本时,默认情况下您将启用一些有用的OpenType功能,例如标准连字(liga),如f + i连字.我认为这是特定于字体的,但事实证明这是特定于正在形成的文本的脚本.Microsoft为OpenType支持的所有脚本提供了指南(在"特定于脚本的开发"下),我可以看到相当复杂的逻辑,可以在HarfBuzz中完成所有这些以确认它.

在Core Text和Pango上,如果我启用其他属性,它们将被添加到这些默认值之上.但是使用DirectWrite,IDWriteTextLayout::SetTypography()这样做会删除默认值:

如果明确指定IDWriteTypography对象,DirectWrite将删除默认的OpenType功能

可以在此处找到生成此输出的程序.

显然我的第一个选择是询问如何获取DirectWrite的默认功能.但是,有人已经在这个网站上这样做了,答案似乎是"不".

我猜测DirectWrite允许我完全控制要应用于某些文本的功能列表.这很好,除了我不能用其他API做到这一点,除非我以某种方式明确禁用默认功能!当然,我不知道这个列表是否会改变,所以硬编码可能不是最好的主意.

即使硬编码是一种选择,我也可以为每个脚本获取HarfBuzz的列表,但是a)它相当复杂 b)脚本有多种可能的整形器,这取决于(我认为)版本兼容性(例如,缅甸).

那么为什么不使用HarfBuzz的列表来重新创建DirectWrite的默认功能列表呢?它似乎想要对其他塑造者准确,所以这应该工作,对吧?好吧,我需要做两件事:找出要使用的脚本,并找出哪些属性用于脚本中字符的位置重要的脚本.

DirectWrite提供了一个接口IDWriteTextAnalyzer,提供执行整形的工具.我可以使用它,但似乎脚本数据在DWRITE_SCRIPT_ANALYSIS结构中返回,并且脚本ID的描述显示"写入系统脚本的从零开始的索引表示.".

这没有用,所以我编写了一个程序来转储我输入的文本的脚本编号.在输入字符串上运行它

????????????????????????? abcd ???? ??? ??????? ????????? ???????? ?????
Run Code Online (Sandbox Code Playgroud)

产生输出

0 - 26 script 3 shapes 0
26 - 5 script 49 shapes 0
31 - 14 script 3 shapes 0
45 - 2 script 1 shapes 1
47 - 25 script 22 …
Run Code Online (Sandbox Code Playgroud)

directx winapi opentype uniscribe directwrite

9
推荐指数
1
解决办法
339
查看次数

WPF TextFormatter中第二行的缩进

我正在使用TextFormatter制作WPF文本编辑器.我需要在每个段落中缩进第二行.

第二行中的缩进宽度应该类似于第一行上第一个单词的宽度,包括第一个单词后面的空格.像这样的东西:

Indent of second line in Indentation Inde
       second line in Indentation Indenta
of second line in Indentation of second l
ine in Indentation of second line in Inde
       ntation of second line in
Run Code Online (Sandbox Code Playgroud)

第二件事:段落的最后一行应该在中心.

如何实现这一目标?

提前致谢!!

.net c# vb.net wpf

9
推荐指数
1
解决办法
734
查看次数

WPF`Galphs`没有像TextBlock那样呈现文本

我正在使用Glyphs元素制作WPF文本编辑器.我有一个问题是文本没有正确绘制,如图所示,我该如何解决这个问题?

在此输入图像描述

有两个问题:

  1. 字母之间的字距.
  2. 字母和变音符号之间的字距.

我通过GetKerningPairs功能解决了第一个问题.

我该如何解决这个问题,也许我错了?

<Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="200" Width="525">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="AUTO"/>
            <RowDefinition Height="AUTO"/>
        </Grid.RowDefinitions>

        <TextBlock Text="TextBlock" VerticalAlignment="Center" Margin="6"/>
        <TextBlock Grid.Row="1" Text="Glyphs" VerticalAlignment="Center" Margin="6"/>

        <TextBlock Text="???????????" Grid.Column="1" FontSize="50" FontFamily="Times New Roman"
                   FontWeight="Normal" Grid.Row="0"/>

        <Glyphs Grid.Row="1" Grid.Column="1"
            FontUri             = "C:\WINDOWS\Fonts\TIMES.TTF"
            FontRenderingEmSize = "50"
            UnicodeString       = "???????????"
            BidiLevel="1"
            Fill                = "Black"/>

        <TextBlock Text="AVAV" Grid.Column="2" FontSize="50" FontFamily="Times New Roman"
                   FontWeight="Normal" Grid.Row="0"/>

        <Glyphs Grid.Row="1" Grid.Column="2"
            FontUri             = …
Run Code Online (Sandbox Code Playgroud)

.net c# vb.net wpf

6
推荐指数
1
解决办法
711
查看次数

在位图中查找blob

我使用AForge.Net在位图中查找blob,我的位图如下:

在AForge.Net中搜索blob

我的问题是AForge.Net只检测到一个blob,实际上细线上有两个连接的blob.

我的问题是有一个算法可以确定它们之间有两个连接很薄的大blob?我如何在C#或VB中实现此算法?

样品图片:

样品图片

c# vb.net graphics graph graph-algorithm

6
推荐指数
1
解决办法
1321
查看次数

完全证明WPF TextFormatter中的最后一行

我正在使用WPF文本编辑器TextFormatter.我需要证明每个段落的最后一行.

像这样的东西:

I need to justify the last line in each
paragraph I need to justify the last li
ne in each  paragraph I need to justify 
the  last line in each paragraph I need 
to    justify    the   last   line   in
Run Code Online (Sandbox Code Playgroud)

如何实现这一目标?

提前致谢!!

.net c# wpf

6
推荐指数
1
解决办法
189
查看次数

识别 Talmud 页面上的文本区域

我有一个像这样的 Talmud 页面: 在此处输入图片说明 在此处输入图片说明 我想找到文本区域opencv以获得这样的结果,每个文本都将像这样自己:

在此处输入图片说明

在附图中,每个区域用不同的颜色标记,并且文本有一个数字,重要的是识别属于每个文本的区域,并将其与属于另一个文本的区域区分开来,数字顺序无关紧要.

根据文本之间的白色条纹,用眼睛做这件事真的很容易,但我试图用眼睛做,但我opencv做不到。

在下面的代码中,我尝试捕捉所有字母并将它们变成黑色矩形,然后放大每个矩形以与相邻的矩形相遇,因此整个文本区域将是黑色的,并且文本之间将有一个清晰的白色条纹。

我不知道如何进行,以及它是否是一个好方法。

public List<Rectangle> getRects(Mat grayImg)
{
    BlobCounter blobCounter = new BlobCounter();
    blobCounter.ObjectsOrder = ObjectsOrder.None;
    blobCounter.ProcessImage(grayImg);
    IEnumerable<Blob> blobs = blobCounter.GetObjectsInformation();

    var blackBlobs = grayImg.Clone;
    foreach (var b in blobs)
        blackBlobs.Rectangle(b.Rectangle.ToCvRect, Scalar.Black, -1);

    var widths = blobs.Select(X => X.Rectangle.Width).ToList;
    widths.Sort();
    var median = widths(widths.Count / (double)2);

    Mat erodet = new Mat();
    Cv2.Erode(grayImg, erodet, null, iterations: median);

    using (Window win = new Window())
    {
        win.ShowImage(erodet);
        win.WaitKey();
    }
}
Run Code Online (Sandbox Code Playgroud)

提前致谢,任何帮助将不胜感激。

补充说明:

正如您在上图中所看到的,文本区域不是矩形,但这些区域可以描述为一堆不同大小的矩形的集合,一个叠一个。

请注意,当两个矩形属于同一个文本时,不要将一个矩形与另一个矩形相邻排列,而只能将一个矩形放在另一个矩形之上。 …

ocr opencv image-processing computer-vision image-segmentation

6
推荐指数
1
解决办法
564
查看次数

过滤不包含所有类型元素的组的有效方法

我有一个这样的 3 个数组:

var blues = new int[] {10, 100, 200};
var reds = new int[] {50, 105, 150};
var greens = new int[] {80, 110, 250};
Run Code Online (Sandbox Code Playgroud)

每个数字表示水平线上的一个点。

如果我将所有内容都放在一个数组中,它将如下所示:

{ 10, 50, 80, 100, 105, 110, 150, 200, 250}
  b   r   g   b    r    g    r    b    g
              | group 1 |
Run Code Online (Sandbox Code Playgroud)

我需要找到组,其中每组有三种颜色[蓝色和红色和绿色],而组中的项目之间的距离之间不大于20bluered,而不是在大于25redgreen

这种算法有已知的名称吗?如果是这样,那是什么?

在 C# 中实现此算法的最佳方法是什么?

该算法需要考虑以下几点:

  1. 可以在 1 到 1000 种颜色之间

  2. 颜色是有顺序的,每种颜色必须按照指定的最大距离与前面的颜色足够接近

  3. 到前一个颜色的距离可以是正数或负数,除非明确说明距离必须是正数

  4. 每种颜色都有自己独特的最大距离,可以远离它前面的颜色

  5. 每种颜色的点数在 1 到 100 万之间,并且每种颜色可以不同。

  6. 每个组都必须包含所有颜色 …

c# algorithm search grouping

5
推荐指数
1
解决办法
467
查看次数

Google文档-以编程方式将鼠标单击发送到大纲窗格中的项目

在Google文档中,您可以打开大纲窗格并查看文档中的所有标题,也可以单击标题,然后视图将滚动到标题。

我的问题是如何在Chrome扩展程序中使用JS编程模拟鼠标单击,以将视图滚动到所需的标题?

我尝试了以下代码,但没有遇到任何意外:

// usage: eventFire(document.getElementById('mytest1'), 'click');
function eventFire(el, etype) {
    if (el.fireEvent) {
        el.fireEvent('on' + etype);
    } else {
        var evObj = document.createEvent('Events');
        evObj.initEvent(etype, true, false);
        el.dispatchEvent(evObj);
    }
}
Run Code Online (Sandbox Code Playgroud)

标头是带有的div元素class="navigation-item-content navigation-item-level-2",当我查看chrome开发工具>事件监听器时,这些元素没有任何事件监听器。

javascript google-docs google-chrome-extension

4
推荐指数
1
解决办法
207
查看次数

DebuggerDisplay 属性是否可以应用于 Microsoft.Office.Interop.Word.Range?

取决于在这个问题上问什么问题Can the DebuggerDisplay attribute be applied to types one don't own,可以将该DebuggerDisplay特性应用于来自外部程序集的类型吗?

如果是这样,有没有办法将它专门应用于 a Microsoft.Office.Interop.Word.Range


我尝试了以下代码,但没有奏效:

<Assembly: DebuggerDisplay("text: {Text}", Target:=GetType(Word.Range))>
Run Code Online (Sandbox Code Playgroud)

在运行时调试器显示此字符串:

{System.__ComObject}
Run Code Online (Sandbox Code Playgroud)

但是 'System.__ComObject' 不可访问,因为它是 'Friend'。

.net com debugging vsto ms-office

3
推荐指数
1
解决办法
151
查看次数

计算给定水平线的形状宽度

假设我有这样一个多边形

public partial class Window2 : Window
{
    public Window2()
    {
        InitializeComponent();

        var myPolygon = new Polygon();
        myPolygon.Stroke = Brushes.Black;
        myPolygon.Fill = Brushes.LightSeaGreen;
        myPolygon.StrokeThickness = 2;

        myPolygon.Points = new PointCollection(new Point[] {
            new Point(50,50),
            new Point(50,165),
            new Point(140,165),
            new Point(140,120),
            new Point(70,120),
            new Point(80,70),
            new Point(140,70),
            new Point(140,50)
        });

        this.Content = myPolygon;
    }
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

假设我想绘制从一边到另一边穿过多边形的红线,如下图所示:

在此处输入图片说明

我只知道线应该站立的垂直位置,但是我怎么知道我应该从哪个水平点开始线以及哪个水平点结束线?

我的主要目标是知道线从哪个水平点开始和在哪个点结束,以便在这条线上安排文本。

如果线在几个地方穿过形状(如下图所示),我想获得所有线的数组:

在此处输入图片说明

请注意,形状可以由直线和拱形组成。

以下是 Adob​​e Illustrator 以形状排列文本的方式:

在此处输入图片说明

我如何在 C# 中做到这一点?

谢谢!

注意:对于赏金,请附上 C# 中的示例。

c# algorithm math geometry line-intersection

2
推荐指数
1
解决办法
886
查看次数

使用 OpenCV 实现反锐化掩码

我想像 Adob​​e Photoshop 一样应用不清晰的蒙版,我知道这个答案,但它不如 Photoshop 清晰。

Photoshop 在 Smart Sharpen 对话框中有 3 个参数:Amount、Radius、Reduce Noise;我想实现所有这些。 在此处输入图片说明

根据 SO 中的各种来源,这是我编写的代码。但是在某些阶段(“blurred”、“unsharpMask”、“highContrast”)结果很好,但在最后阶段(“retval”)结果不好。

我哪里错了,我应该改进什么?

是否可以在性能方面改进以下算法?

#include "opencv2/opencv.hpp"
#include "fstream"
#include "iostream"
#include <chrono>

using namespace std;
using namespace cv;

// from https://docs.opencv.org/3.4/d3/dc1/tutorial_basic_linear_transform.html
void increaseContrast(Mat img, Mat* dst, int amountPercent)
{
    *dst = img.clone();
    double alpha = amountPercent / 100.0;
    *dst *= alpha;
}

// from /sf/answers/41737041/
float luminanceAsPercent(Vec3b color)
{
    return (0.2126 * color[2]) + (0.7152 * color[1]) + (0.0722 * color[0]);
}

// …
Run Code Online (Sandbox Code Playgroud)

c++ photoshop opencv image-processing

1
推荐指数
1
解决办法
197
查看次数