Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
Возможно, вы захотите рассмотреть возможность использования нового свойства, доступного в WPF4. Оставьте RenderOptions.BitmapScalingMode
до HighQuality или просто не объявляйте его.
NearestNeighbor работал для меня, за исключением того, что он приводил к искаженным растровым изображениям при масштабировании приложение. Он также, похоже, не исправил каких-либо сбоев, где значки определялись странными способами.
В вашем корневом элементе (т. Е. В главном окне) добавьте это свойство: UseLayoutRounding="True"
.
Свойство, ранее доступное только в Silverlight, теперь исправило все проблемы с битрейтом. :)
Я обнаружил, что 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, а также с изображениями. И размытие происходит только для некоторых текстовых блоков и изображений, а не для всех.
Я считаю, что это ошибка (или, по крайней мере, это было). Ознакомьтесь с этой страницей поддержки электронной почты поддержки Microsoft для некоторых идей по ее исправлению.
Я обнаружил, что никакая комбинация предложенных обходных решений не устранит мою, казалось бы, случайную проблему с размытым изображением. Мне нравится, что многие другие не могут перейти на .net 4, чтобы использовать свойство UseLayoutRendering
.
Что я нашел для работы:
+1 для Zack Peterson
Я использую .Net 3.5 sp1, и он выглядит как самое простое решение для большого количества нечетких изображений. Не стоит указывать RenderOptions на месте, но для сторонних компонентов стиль в ресурсе на уровне приложений имеет смысл:
<Style TargetType="{x:Type Image}">
<Setter
Property="RenderOptions.BitmapScalingMode"
Value="NearestNeighbor" />
</Style>
Хорошо работал, когда AvalonDock начал создавать размытые значки.
Моя первая мысль, прочитав вопрос, заключалась в том, что вы слишком сильно взорвали изображение, но похоже, что это не так, глядя на образ, который у вас есть.
Вторая мысль цветовой палитрой, но с черным как один из цветов, который не отображается правильно, это не так.
Если вы можете полностью исключить два выше, я в настоящее время тупик.
В качестве эксперимента вы можете попробовать другие графические форматы, но PNG должно быть в порядке. Мне придется подумать над тем, чтобы придумать лучший ответ.
Использование UseLayoutRounding="True"
в корневом окне работает во многих случаях, но я столкнулся с проблемой при использовании элемента управления WPF Ribbon . Мое приложение опирается на контекстные вкладки, которые отображаются в соответствии с тем, что делает пользователь, и когда я устанавливаю UseLayoutRounding
в True
, контекстная вкладка не будет отображаться и изображение RibbonButton не будет отображаться. Кроме того, приложение замерзает в течение многих секунд, и вентилятор процессора начинает петь.
Используя RenderOptions.BitmapScalingMode="NearestNeighbor"
на моем изображении, исправили проблемы с рендерингом изображения (нечеткое и обрезанное изображение) и полностью совместимы с использованием контекстных вкладок ленты ,
Я пытался использовать RenderOptions.BitmapScalingMode = HighQuality, похоже, вызывает некоторые проблемы в Windows 8.1, так что я сделал, чтобы запустить их через инструмент PngOut.exe
http://advsys.net/ken/utils.htm
Что уменьшает заголовок png, а также уменьшает размер, но без изменения качества изображения.
И теперь все мои изображения прекрасны! :-)
Убедитесь, что вы сохраняете изображение в том же DPI, что и приложение WPF, некоторые форматы изображений содержат эту информацию в виде метаданных. Я не знаю, решает ли это проблему, но у меня возникли некоторые проблемы из-за этого, когда изображения, измененные до 100%, стали больше или меньше, чем ожидалось.
Может быть что-то подобное.
use UseLayoutRounding = True для самого верхнего элемента вашего приложения
Вместо использования 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