Я отображаю список предметов с изображениями. Изображения генерируются из необработанных данных в 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
к каждому объекту и установитьэто к растровому наложению или к прозрачному пикселю. ( РЕДАКТИРОВАТЬ: это то, что я в итоге сделал.)