Вопрос

Я хочу сделать 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, казалось, путь.

Это было полезно?

Решение

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

Что вы планируете делать с этим растровым карманом? Если вы хотите сделать его в приложении WPF, это необходимо сначала преобразовать в формат 32BPP в любом случае, поэтому вы рискуете использовать более Память, если вы попытаетесь удержать его внутри в любом другом формате. (Вы будете иметь предположительное представление а также Версия WPF на самом деле способна работать.) Не говоря уже о дополнительном времени процессора, потраченного преобразования между выбранным форматом и форматом WPF.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top