Как нарисовать нечеткую / размытую линию в DrawingImage / DrawingContext? - PullRequest
3 голосов
/ 20 июля 2010

Смотрите изображение. Я бы хотел, чтобы средняя линия была хрустящей 1-пиксельной. Вы можете скопировать и вставить образец разметки в kaxaml .

альтернативный текст http://img832.imageshack.us/img832/1704/lines.png


<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
   <Image SnapsToDevicePixels="True" Stretch="None">
      <Image.Source>
         <DrawingImage>
            <DrawingImage.Drawing>
               <DrawingGroup>
                  <GeometryDrawing>
                     <GeometryDrawing.Pen>
                        <Pen Brush="Red" Thickness="1"/>
                     </GeometryDrawing.Pen>
                     <GeometryDrawing.Geometry>
                        <LineGeometry StartPoint="0,0" EndPoint="50,0"/>
                     </GeometryDrawing.Geometry>
                  </GeometryDrawing>
                  <GeometryDrawing>
                     <GeometryDrawing.Pen>
                        <Pen Brush="Black" Thickness="1"/>
                     </GeometryDrawing.Pen>
                     <GeometryDrawing.Geometry>
                        <LineGeometry StartPoint="0,5.860" EndPoint="50,5.860"/>
                     </GeometryDrawing.Geometry>
                  </GeometryDrawing>
                  <GeometryDrawing>
                     <GeometryDrawing.Pen>
                        <Pen Brush="Black" Thickness="1"/>
                     </GeometryDrawing.Pen>
                     <GeometryDrawing.Geometry>
                        <LineGeometry StartPoint="0,12" EndPoint="50,12"/>
                     </GeometryDrawing.Geometry>
                  </GeometryDrawing>
               </DrawingGroup>
            </DrawingImage.Drawing>
         </DrawingImage>
      </Image.Source>
   </Image>
</Page>

Ответы [ 3 ]

9 голосов
/ 20 июля 2010

Я нашел решение по адресу: http://msdn.microsoft.com/en-us/library/system.windows.media.renderoptions.setedgemode.aspx

<Image Stretch="None" RenderOptions.EdgeMode="Aliased">
RenderOptions.SetEdgeMode(this, EdgeMode.Aliased);
1 голос
/ 20 июля 2010

Измените среднюю линию на:

<LineGeometry StartPoint="0,6" EndPoint="50,6"/>

Вы можете получить четкую линию на границе пикселей, поместив линию на целую пронумерованную единицу.

0 голосов
/ 30 июля 2013

Я видел аналогичную проблему с элементом управления Border, хотя @phi ваше решение работало в большинстве случаев, мне также пришлось добавить следующее, чтобы оно полностью заработало:

SnapsToDevicePixels="True"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...