c # W.P.F. image show tiff (всего 1 страница) размытый [дубликат]

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

156
задан SuperBiasedMan 17 August 2015 в 16:30
поделиться

11 ответов

Возможно, вы захотите рассмотреть возможность использования нового свойства, доступного в WPF4. Оставьте RenderOptions.BitmapScalingMode до HighQuality или просто не объявляйте его.

NearestNeighbor работал для меня, за исключением того, что он приводил к искаженным растровым изображениям при масштабировании приложение. Он также, похоже, не исправил каких-либо сбоев, где значки определялись странными способами.

В вашем корневом элементе (т. Е. В главном окне) добавьте это свойство: UseLayoutRounding="True".

Свойство, ранее доступное только в Silverlight, теперь исправило все проблемы с битрейтом. :)

203
ответ дан Domokun 16 August 2018 в 00:06
поделиться
  • 1
    Более подробную информацию об этом новом свойстве можно найти здесь: blogs.msdn.com/text/archive/2009/08/27/layout-rounding.aspx – Domokun 29 April 2010 в 07:27
  • 2
    UseLayoutRendering = & Quot; Правда & Quot; это то, что я использовал - это идеально подходит для решения моих размытых образов. Благодаря! – Matt DeKrey 12 December 2010 в 00:27
  • 3
    FINALLY !! UseLayoutRounding должен быть установлен по умолчанию. Изображения появляются точно так же, как оригинал и даже текст в некоторых местах (например, ContextMenus, для меня, по крайней мере) проявляется четче, чем раньше. Спасибо, Домокун! – grant 4 April 2011 в 03:46
  • 4
    Я думаю, что у тех из нас, кто все еще придерживался .NET 3.5, нет никаких опций? – jpierson 22 June 2012 в 22:21
  • 5
    WTF !? AMAZING UseLayoutRounding должен быть опцией отказа. Благодаря! – wischi 28 August 2013 в 15:13

Я обнаружил, что RenderOptions.BitmapScalingMode = "NearestNeighbor" не работает для меня. Я использую Windows XP x32 с DirectX 9.0c. Поскольку фактический рендеринг для WPF выполняется с помощью DirectX, это может иметь эффект. У меня есть anti-aliasing включен для XP со следующими записями реестра:

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Avalon.Graphics] "MaxMultisampleType" = dword: 00000004 "EnableDebugControl" = dword: 00000001

Однако включение этих настроек не влияет на изображения. Я думаю, что это только эффекты 3D-видовых экранов.

Наконец, я обнаружил, что размытие происходит с текстом TextBlocks, а также с изображениями. И размытие происходит только для некоторых текстовых блоков и изображений, а не для всех.

2
ответ дан anon 16 August 2018 в 00:06
поделиться

Я считаю, что это ошибка (или, по крайней мере, это было). Ознакомьтесь с этой страницей поддержки электронной почты поддержки Microsoft для некоторых идей по ее исправлению.

2
ответ дан Beep beep 16 August 2018 в 00:06
поделиться

Я обнаружил, что никакая комбинация предложенных обходных решений не устранит мою, казалось бы, случайную проблему с размытым изображением. Мне нравится, что многие другие не могут перейти на .net 4, чтобы использовать свойство UseLayoutRendering.

Что я нашел для работы:

  • Убедитесь, что ваше [оригинальное] изображение размеры кратно 2. Это, по-видимому, предотвращает некоторые проблемы с масштабированием изображения.
  • Иногда я также обнаружил, что корректировка полей на изображениях с помощью пикселя или 2 может предотвратить проблему.
2
ответ дан Chris 16 August 2018 в 00:06
поделиться

+1 для Zack Peterson

Я использую .Net 3.5 sp1, и он выглядит как самое простое решение для большого количества нечетких изображений. Не стоит указывать RenderOptions на месте, но для сторонних компонентов стиль в ресурсе на уровне приложений имеет смысл:

 <Style TargetType="{x:Type Image}">
    <Setter
        Property="RenderOptions.BitmapScalingMode"
        Value="NearestNeighbor" />
 </Style>

Хорошо работал, когда AvalonDock начал создавать размытые значки.

22
ответ дан DK. 16 August 2018 в 00:06
поделиться
  • 1
    Наверное, я должен тебе пиво или пять ... – EricSchaefer 5 September 2012 в 13:40
  • 2
    AvalonDock также дает мне те же головные боли ... и я все еще с .Net 3.5 – Ignacio Soler Garcia 8 May 2013 в 07:59

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

Вторая мысль цветовой палитрой, но с черным как один из цветов, который не отображается правильно, это не так.

Если вы можете полностью исключить два выше, я в настоящее время тупик.

В качестве эксперимента вы можете попробовать другие графические форматы, но PNG должно быть в порядке. Мне придется подумать над тем, чтобы придумать лучший ответ.

0
ответ дан Gregory A Beamer 16 August 2018 в 00:06
поделиться
  • 1
    +1, чтобы предотвратить необоснованные отрицательные голоса, так как я думаю, что вы предложили некоторые разумные предложения и только пытались помочь, и, что самое главное, в ваших предложениях не было ничего плохого. – jpierson 22 June 2012 в 22:26

Использование UseLayoutRounding="True" в корневом окне работает во многих случаях, но я столкнулся с проблемой при использовании элемента управления WPF Ribbon . Мое приложение опирается на контекстные вкладки, которые отображаются в соответствии с тем, что делает пользователь, и когда я устанавливаю UseLayoutRounding в True, контекстная вкладка не будет отображаться и изображение RibbonButton не будет отображаться. Кроме того, приложение замерзает в течение многих секунд, и вентилятор процессора начинает петь.

Используя RenderOptions.BitmapScalingMode="NearestNeighbor" на моем изображении, исправили проблемы с рендерингом изображения (нечеткое и обрезанное изображение) и полностью совместимы с использованием контекстных вкладок ленты ,

8
ответ дан hexacyanide 16 August 2018 в 00:06
поделиться

Я пытался использовать RenderOptions.BitmapScalingMode = HighQuality, похоже, вызывает некоторые проблемы в Windows 8.1, так что я сделал, чтобы запустить их через инструмент PngOut.exe

http://advsys.net/ken/utils.htm

Что уменьшает заголовок png, а также уменьшает размер, но без изменения качества изображения.

И теперь все мои изображения прекрасны! :-)

0
ответ дан MMM 16 August 2018 в 00:06
поделиться

Убедитесь, что вы сохраняете изображение в том же DPI, что и приложение WPF, некоторые форматы изображений содержат эту информацию в виде метаданных. Я не знаю, решает ли это проблему, но у меня возникли некоторые проблемы из-за этого, когда изображения, измененные до 100%, стали больше или меньше, чем ожидалось.

Может быть что-то подобное.

4
ответ дан user 16 August 2018 в 00:06
поделиться

use UseLayoutRounding = True для самого верхнего элемента вашего приложения

3
ответ дан Varatharaj 16 August 2018 в 00:06
поделиться

Вместо использования SnapsToDevicePixels я вместо этого использовал RenderOptions.BitmapScalingMode, и они теперь приятные и четкие!

XAML:

<Image Name="ImageOrderedList"
       Source="images/OrderedList.png"
       ToolTip="Ordered List"
       Margin="0,0,5,5"
       Width="20"
       Height="20"
       RenderOptions.BitmapScalingMode="NearestNeighbor"
       MouseUp="Image_MouseUp"
       MouseEnter="Image_MouseEnter"
       MouseLeave="Image_MouseLeave" />

Вот как это выглядит сейчас:

Хрустящие картинки WPF http://img13.imageshack.us/img13/9926/crispwpfimages.gif

70
ответ дан Zack Peterson 16 August 2018 в 00:06
поделиться
  • 1
    Также, если ваше изображение было точного размера, как указано в & lt; Image & gt; тег, тогда ему не нужно было бы масштабировать его и сделать его четким. – Bearddo 26 February 2009 в 22:42
  • 2
    Я не уверен, что это будет иметь желаемый эффект при другом DPI – Dave 27 February 2009 в 04:20
  • 3
    Beardo, как исходный график, так и & lt; Изображение & gt; 20 пикселей на 20 пикселей. Насколько я понимаю, проблема исходит от WPF. Это своего рода желание игнорировать пиксельную сетку монитора, поэтому логическая сетка обычно не идеально сочетается с физической сеткой. – Zack Peterson 2 March 2009 в 16:22
  • 4
    @ Zack Width = "20" не означает 20 пикселей. Это означает 20/96 дюйма. Если ваша ОС настроена на работу с 96 DPI, то она составляет 20 пикселей. Теперь, как будет выглядеть ваш ближайший сосед на хорошем мониторе, например, 160 DPI? И как это будет выглядеть при печати в 300 DPI? Вы не должны оптимизировать свою машину. – Frank Krueger 29 April 2010 в 03:36
  • 5
    Я также обнаружил, что для изображений размером с пиксель NearestNeighbor намного лучше HighQuality, особенно если вы объедините его с img.Width = imgSource.PixelWidth; img.Height = imgSource.PixelHeight. Мой клиент предоставил некоторые изображения с разными сумасшедшими значениями DPI, и я не мог попросить клиента преобразовать их все, поэтому мне пришлось использовать этот хак. – JustAMartin 28 November 2012 в 22:44
Другие вопросы по тегам:

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