Как заполнить SolidColorBrush / Ellipse [дубликат]

GetPixel медленный по двум причинам:

  1. Поскольку вы просматриваете экран - каждый вызов GetPixel приводит к транзакции к видеодрайверу, который, в свою очередь, принимает данные пикселя из видеопамяти.
  2. В любом случае GetPixel выполняет несколько действий, включая обрезание / преобразование координат и т. Д.
  3. . [D2] GetPixel на DIB намного быстрее.

Итак, если вы используете для запроса многих значений пикселей сразу - вы должны попытаться организовать это в одной транзакции с драйвером GDI / video.

Используя GDI, вы должны создать DIB соответствующего размера (см. CreateDIBSection ). После создания вам будет предоставлен прямой указатель на данные битов изображения. Затем скопируйте часть изображения на ваш DIB (см. [D5] BitBlt ). Также не забудьте вызвать GdiFlush , прежде чем вы действительно проверите содержимое DIB (так как видеодрайверы могут делать асинхронный рисунок).

Используя GD +, вы можете сделать то же самое, с немного более простым синтаксисом.

6
задан user1477388 31 July 2013 в 13:45
поделиться

4 ответа

Вы можете поместить такие вещи в окне просмотра, чтобы упростить масштабирование, что-то вроде этого. Вам нужно будет удалить панель стека, она будет складывать элементы один поверх другого, что не то, что вы здесь. В этом случае я использовал сетку.

<Viewbox Width="100" Height="100">
    <Grid Width="20" Height="20">
        <Ellipse Stroke="Black"/>
        <TextBlock HorizontalAlignment="Center" Text="i" TextAlignment="Center" VerticalAlignment="Center"/>
    </Grid>
</Viewbox>

enter image description here [/g0]

17
ответ дан Andy 15 August 2018 в 22:36
поделиться
  • 1
    Приятно, именно то, что я пытался сделать. – user1477388 31 July 2013 в 13:55

Таким образом, стековая панель поместит первый элемент вверху, второй чуть ниже его, третий ниже второго и т. д. Вы можете использовать Canvas или Grid. Подобно панели стека, они являются «элементами управления контентом» и поддерживают размещение внутри них нескольких объектов, как это было сделано со стековой панелью.

Итак, действительно быстрый способ сделать то, что вы пытаетесь выполнить, будет таким:

<Grid >
        <Ellipse HorizontalAlignment="Left" Height="52"  Stroke="Black" VerticalAlignment="Top" Width="52"/>
        <TextBlock  Text="i" FontSize="52" Margin="18,-13,-6,13" />
</Grid>
5
ответ дан Cramja 15 August 2018 в 22:36
поделиться

Или вы можете использовать символ юникода: ⓘ

код 0x24D8

 <TextBlock Text="ⓘ" FontSize="52" />
8
ответ дан Henk Holterman 15 August 2018 в 22:36
поделиться
  • 1
    Это в интересном ответе. Будет ли это работать на всех машинах, является ли это особым шрифтом или чем-то, что я должен беспокоить? – user1477388 31 July 2013 в 14:08
  • 2
    Он является стандартным Unicode и должен работать на всех машинах (которые могут запускать WPF), но вам придется тестировать при использовании специальных шрифтов. – Henk Holterman 31 July 2013 в 14:11
  • 3
    Это не связано с тем, что он задает, он хочет изучить WPF (я полагаю, он пытается выяснить элементы управления и макеты), использование char не поможет ему в этом. – So Many Goblins 31 July 2013 в 14:12
  • 4
    Да, я специально пытался перестроить его, чтобы изучить элементы управления и макеты WPF; однако это все еще интересное, минимальное и, вероятно, лучшее решение! – user1477388 31 July 2013 в 14:24
  • 5
    Один char TextBlock тоже WPF ... И это имеет одно большое преимущество: не нужно указывать (и соответствовать) Height и Width. Вы можете добавить Margin, но FontSize действует как SPOD. – Henk Holterman 31 July 2013 в 14:25

Не используйте StackPanel для этого, цель состоит в том, чтобы стекать вещи, а не показывать их перекрывающимися, вы используете для этого неправильный инструмент. Используйте Grid, это намного больше подходит для того, что вы пытаетесь сделать.

Чтобы иметь прозрачный фон, вам необходимо либо установить свойство Text [[x]] фона TextBlock , либо «Прозрачный», или установите нулевой фон.

Background={x:Null}
2
ответ дан So Many Goblins 15 August 2018 в 22:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: