Большая растровая манипуляция в WPF - PullRequest
3 голосов
/ 30 декабря 2010

Может ли WPF манипулировать большими растровыми изображениями, где GDI + не может из-за ограничений памяти?

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

Мне нужно сделать четыре вещи

  1. Возьмите набор плиточных изображений
  2. Поместите все эти плитки в одно растровое изображение
  3. Преобразование растрового изображения в черно-белое
  4. Сканирование растрового изображения в поисках изменений с черного на белый

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

Ответы [ 3 ]

1 голос
/ 07 января 2011

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

1 голос
/ 30 декабря 2010

Не думаю, что WPF сможет вам здесь помочь.

Почему вы хотите использовать растровое изображение?Вы также можете работать с двумерным массивом байтов или двойных чисел (или любым другим типом, в зависимости от того, какая точность и диапазон вам нужны), особенно если вы работаете только с одним каналом.Битовые карты имеют методы доступа (GetPixel и т. П.) С огромными вычислительными затратами, работа с массивами на порядок быстрее (я знаю из личного опыта), единственная проблема заключается в том, что вы не можете отображать их такими, какие они есть (вам придетсяпреобразовать массив обратно в изображение, что довольно просто).Но так как вы, похоже, хотите провести какой-то анализ данных, я думаю, что массив будет гораздо более подходящим для ваших нужд.

Я могу опубликовать примеры кода, подробно описывающие преобразование из растрового изображения (WPF или WinForms) вЕсли вам нужно, добавьте массив обратно.

Но помните, что 32-битное приложение .NET может использовать приблизительно 1,2-1,4 гигабайта памяти - вам нужно вписаться в это пространство, или вы начинаете получать исключения OutOfMemory.

0 голосов
/ 30 декабря 2010

Как сказал CommanderZ.Это Windows PRESENTATION Foundation, а не Windows Image-манипулирование Фондом.Вам следует либо попытаться найти какую-нибудь библиотеку для манипулирования изображениями, но, глядя на размер вашего изображения, тогда делать все самостоятельно можно только одним способом.

Особенно, вы, вероятно, не сможете работать с растровым изображениемв целом, так что вы собираетесь работать с плитками.Тогда это становится проблематичным, если вам нужно работать с соседними пикселями.Но я полагаю, вам стоит заняться этим самим.

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