图片DPI不同,加载到软件后,显示会有区别

32 篇文章 1 订阅

最近遇到图片加载显示到WPF的Image控件上,出现显示的问题。我的电脑显示器默认的DPI是96*96的,但是一开始没注意加载进来的图片的DPI值,导致图片加载进来后,图片的PixelHeight,PixelWidth的值和Height,Width比例有变化。

DPI是指每英寸的像素。所以DPI变化时,再像素高宽不变的情况下,图片的Height和Width会变化。

所以,当软件加载DPI为300*300的图片时,和再DPI为96*96的情况下会有变化。

如果想要加载图片后,达到相同的效果,则可以将加载进来的300*300的图片DPI修改为96*96后,再对图片进行操作。

下面是DPI转换的代码。

ImageSource source;
Bitmap newBitmap = BitmapFromSource((BitmapSource)source);
newBitmap.SetResolution(96, 96);
BitmapSource bitmapSource = getBitMapSourceFromBitmap(newBitmap);
source = bitmapSource;

下面是BitmapSource转Bitmap的代码

        private Bitmap BitmapFromSource(BitmapSource bitmapsource)
        {
            Bitmap bitmap;
            using (var outStream = new MemoryStream())
            {
                BitmapEncoder enc = new BmpBitmapEncoder();
                enc.Frames.Add(BitmapFrame.Create(bitmapsource));
                enc.Save(outStream);
                bitmap = new Bitmap(outStream);
            }
            return bitmap;
        }

下面是Bitmap转BitmapSource的代码

[DllImport("gdi32")]
        int DeleteObject(IntPtr o);
        /// <summary>
        /// Bitmap->BitmapSource
        /// </summary>
        /// <param name="bitmap"></param>
        /// <returns></returns>
        public BitmapSource getBitMapSourceFromBitmap(Bitmap bitmap)
        {
            IntPtr intPtrl = bitmap.GetHbitmap();
            BitmapSource bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(intPtrl,
                IntPtr.Zero,
                Int32Rect.Empty,
                BitmapSizeOptions.FromEmptyOptions());
            DeleteObject(intPtrl);
            return bitmapSource;
        }

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值