Как использовать PixelFormats.IndexedX с RenderTargetBitmap? - PullRequest
5 голосов
/ 03 декабря 2010

Я хочу визуализировать DrawingVisual (визуальный в примере) для растрового изображения, используя RenderTargetBitmap с представлением, чтобы установить это растровое изображение в качестве фона на Canvas, как показано ниже:

var bmp = new RenderTargetBitmap(2000, 50, 120, 96, PixelFormats.Indexed2);
bmp.Render(visual);
var brush = new ImageBrush(bmp) { Stretch = Stretch.Fill };
Canvas.Background = brush;

При использовании PixelFormats.Default в качестве последнего аргумента RenderTargetBitmap изображение отображается так, как ожидалось.Однако, когда я выбираю PixelFormats.Indexed2 (или любой из PixelFormats.IndexedX), мой код, похоже, выходит из метода без исключения, строка bmp.Render никогда не вызывается и, следовательно, изображение не отображается в Canvas.

Как использовать IndexedX форматы пикселей с RenderTargetBitmap?Или есть другие способы уменьшить объем памяти изображения?Он использует только три цвета, поэтому использование палитры, а не 32-битного RGB, кажется правильным.

1 Ответ

12 голосов
/ 03 декабря 2010

Вы не можете. RenderTargetBitmap поддерживает только формат Pbgra32 пикселей. Это потому, что система рендеринга WPF работает полностью в 32 битах на пиксель. Это формат, в котором он генерирует изображения, а также формат, в котором он предпочитает изображения, если вы хотите их визуализировать. (Если вы предоставите ему растровое изображение в любом другом формате, сначала его нужно будет преобразовать в 32-битное представление.)

Что вы планируете делать с этим растровым изображением? Если вы хотите отобразить его в приложении WPF, его в любом случае необходимо сначала преобразовать в формат 32bpp, поэтому вы рискуете использовать more память, если попытаетесь удержать ее внутри в любом другом формате. , (У вас будет ваше предположительно эффективное представление памяти и версии, с которой WPF действительно может работать.) Не говоря уже о дополнительном времени ЦП, затрачиваемом на преобразование между выбранным форматом и форматом, с которым может работать WPF. 1009 *

...