我有一个生成BitmapSource
的程序,然后用它来创建CurrentImage
。然后,我将WPF Image
的{{1}}属性分配给我创建的BitmapSource
。
问题在于:无论我将BitmapSource
的DPI值设置为什么,我最终都会在4K显示屏上显示颗粒状图片。
我正在使用的XAML是:
<Image Source="{Binding Path=CurrentImage, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SnapsToDevicePixels="True"/>
,代码如下:
private static void SetBitmap(FreeformEditor fe, Bitmap bmp)
{
if (fe.lastBitmap != IntPtr.Zero)
DeleteObject(fe.lastBitmap);
try
{
var data = bmp.LockBits(
new Rectangle(0, 0, bmp.Width, bmp.Height),
ImageLockMode.ReadOnly, bmp.PixelFormat);
var dpi = baseDPI * (1 + fe.RenderForRetina.ToInt());
fe.CurrentImage = BitmapSource.Create(
data.Width, data.Height, dpi, dpi, PixelFormats.Bgr32, null,
data.Scan0, data.Stride * data.Height, data.Stride);
bmp.UnlockBits(data);
fe.lastBitmap = bmp.GetHbitmap();
fe.imageSizeRun.Content = string.Format("{0}x{1} @{2}dpi", fe.CurrentImage.Width,
fe.CurrentImage.Height,
fe.CurrentImage.DpiX);
}
catch
{
// this happens due to framework bugs
}
}