WPF: создавать растровые изображения вне экрана с масштабированием ближайшего соседа? - PullRequest
0 голосов
/ 22 декабря 2019

Я отображаю список предметов с изображениями. Изображения генерируются из необработанных данных в BitmapSource объекты, которые затем масштабируются до 64x64, используя Image объект в DataTemplate. Некоторые из исходных изображений очень маленькие - они приходят из 8-битного программного обеспечения - поэтому у меня есть RenderOptions.BitmapScalingMode="NearestNeighbor" на Image, чтобы получить правильный внешний вид.

Для некоторых объектов я хочу взятьBitmapSource и наложите на него второе изображение. В настоящее время я делаю композицию так:

DrawingVisual visual = new DrawingVisual();
DrawingContext dc = visual.RenderOpen();
Rect bounds = new Rect(0, 0, IMAGE_SIZE, IMAGE_SIZE);
dc.DrawImage(source1, bounds);
dc.DrawImage(source2, bounds);
dc.Close();

RenderTargetBitmap bmp = new RenderTargetBitmap(IMAGE_SIZE, IMAGE_SIZE, 96.0, 96.0,
    PixelFormats.Pbgra32);
bmp.Render(visual);

Затем я использую bmp в качестве BitmapSource. Проблема в том, что DrawImage() теперь выполняет масштабирование, используя режим по умолчанию, поэтому я получаю размытую звезду, а не сплошные блоки. Я не могу найти способ настроить режим масштабирования.

Я попытался добавить:

RenderOptions.SetBitmapScalingMode(visual, BitmapScalingMode.NearestNeighbor);

в надежде, что DrawImage() ищет там значение, но у него нетЭффект.

Есть ли способ настроить скейлер?

Единственный другой подход, который я предложил, - это добавить секунду (перекрывающуюся) BitmapSource к каждому объекту и установитьэто к растровому наложению или к прозрачному пикселю. ( РЕДАКТИРОВАТЬ: это то, что я в итоге сделал.)

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